web-csv-toolbox 0.0.0-next-20240205123651 → 0.0.0-next-20240205154048

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.
@@ -1,2 +1,2 @@
1
- "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./assertCommonOptions.cjs"),e=require("./common/constants.cjs"),i=require("./constants.cjs"),s=require("./utils/escapeRegExp.cjs");exports.Lexer=class{#t;#e;#i;#s;#h;#r="";#n=!1;constructor({delimiter:e=i.COMMA,quotation:h=i.DOUBLE_QUOTE}={}){t.assertCommonOptions({delimiter:e,quotation:h}),this.#t=e,this.#e=e.length,this.#i=h,this.#s=h.length;const r=s.escapeRegExp(e),n=s.escapeRegExp(h);this.#h=new RegExp(`^(?:(?!${n})(?!${r})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${n}|${r}|\\r|\\n|$)`)}lex(t,e=!1){return e||(this.#n=!0),"string"==typeof t&&0!==t.length&&(this.#r+=t),this.#u()}flush(){return this.#n=!0,[...this.#u()]}*#u(){this.#n&&(this.#r.endsWith(i.CRLF)?this.#r=this.#r.slice(0,-i.CRLF.length):this.#r.endsWith(i.LF)&&(this.#r=this.#r.slice(0,-i.LF.length)));let t=null;for(let i;i=this.#f();)switch(i){case e.FieldDelimiter:case e.RecordDelimiter:t&&(yield t,t=null),yield i;break;default:t=i}t&&(yield t)}#f(){if(0===this.#r.length)return null;if(!1===this.#n&&(this.#r===i.CRLF||this.#r===i.LF))return null;if(this.#r.startsWith(i.CRLF))return this.#r=this.#r.slice(2),e.RecordDelimiter;if(this.#r.startsWith(i.LF))return this.#r=this.#r.slice(1),e.RecordDelimiter;if(this.#r.startsWith(this.#t))return this.#r=this.#r.slice(this.#e),e.FieldDelimiter;if(this.#r.startsWith(this.#i))return!1===this.#n&&this.#r.endsWith(this.#i)?null:this.#l();const t=this.#h.exec(this.#r);return t?!1===this.#n&&t[0].length===this.#r.length?null:(this.#r=this.#r.slice(t[0].length),{type:e.Field,value:t[0]}):null}#l(){let t=this.#s,s="";for(;t<this.#r.length;)if(this.#r.slice(t,t+this.#s)!==this.#i||this.#r.slice(t+this.#s,t+2*this.#s)!==this.#i){if(this.#r.slice(t,t+this.#s)===this.#i)return!1===this.#n&&t+this.#s<this.#r.length&&this.#r.slice(t+this.#s,this.#e)!==this.#t&&this.#r.slice(t+this.#s,t+this.#s+2)!==i.CRLF&&this.#r.slice(t+this.#s,t+this.#s+1)!==i.LF?null:(this.#r=this.#r.slice(t+this.#s),{type:e.Field,value:s});s+=this.#r[t],t++}else s+=this.#i,t+=2*this.#s;return null}};
1
+ "use strict";Object.defineProperty(exports,Symbol.toStringTag,{value:"Module"});const t=require("./assertCommonOptions.cjs"),e=require("./common/constants.cjs"),i=require("./constants.cjs"),s=require("./utils/escapeRegExp.cjs");exports.Lexer=class{#t;#e;#i;#s;#h;#r="";#u=!1;constructor({delimiter:e=i.COMMA,quotation:h=i.DOUBLE_QUOTE}={}){t.assertCommonOptions({delimiter:e,quotation:h}),this.#t=e,this.#e=e.length,this.#i=h,this.#s=h.length;const r=s.escapeRegExp(e),u=s.escapeRegExp(h);this.#h=new RegExp(`^(?:(?!${u})(?!${r})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${u}|${r}|\\r|\\n|$)`)}lex(t,e=!1){return e||(this.#u=!0),"string"==typeof t&&0!==t.length&&(this.#r+=t),this.#n()}flush(){return this.#u=!0,[...this.#n()]}*#n(){this.#u&&(this.#r.endsWith(i.CRLF)?this.#r=this.#r.slice(0,-i.CRLF.length):this.#r.endsWith(i.LF)&&(this.#r=this.#r.slice(0,-i.LF.length)));let t=null;for(let i;i=this.#f();)switch(i){case e.FieldDelimiter:case e.RecordDelimiter:t&&(yield t,t=null),yield i;break;default:t?t.value+=i.value:t=i}t&&(yield t)}#f(){if(0===this.#r.length)return null;if(!1===this.#u&&(this.#r===i.CRLF||this.#r===i.LF))return null;if(this.#r.startsWith(i.CRLF))return this.#r=this.#r.slice(2),e.RecordDelimiter;if(this.#r.startsWith(i.LF))return this.#r=this.#r.slice(1),e.RecordDelimiter;if(this.#r.startsWith(this.#t))return this.#r=this.#r.slice(this.#e),e.FieldDelimiter;if(this.#r.startsWith(this.#i))return!1===this.#u&&this.#r.endsWith(this.#i)?null:this.#l();const t=this.#h.exec(this.#r);return t?!1===this.#u&&t[0].length===this.#r.length?null:(this.#r=this.#r.slice(t[0].length),{type:e.Field,value:t[0]}):null}#l(){let t=this.#s,s="";for(;t<this.#r.length;)if(this.#r.slice(t,t+this.#s)!==this.#i||this.#r.slice(t+this.#s,t+2*this.#s)!==this.#i){if(this.#r.slice(t,t+this.#s)===this.#i)return!1===this.#u&&t+this.#s<this.#r.length&&this.#r.slice(t+this.#s,this.#e)!==this.#t&&this.#r.slice(t+this.#s,t+this.#s+2)!==i.CRLF&&this.#r.slice(t+this.#s,t+this.#s+1)!==i.LF?null:(this.#r=this.#r.slice(t+this.#s),{type:e.Field,value:s});s+=this.#r[t],t++}else s+=this.#i,t+=2*this.#s;return null}};
2
2
  //# sourceMappingURL=Lexer.cjs.map
@@ -1 +1 @@
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 { CommonOptions, Token } from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\nexport class Lexer {\n #delimiter: string;\n #delimiterLength: number;\n #quotation: string;\n #quotationLength: number;\n #matcher: RegExp;\n #buffer = \"\";\n #flush = false;\n\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#delimiterLength = delimiter.length;\n this.#quotation = quotation;\n this.#quotationLength = quotation.length;\n\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 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 public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\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, -CRLF.length);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -LF.length);\n }\n }\n let currentField: Token | null = null;\n for (let token: Token | null; (token = this.#nextToken()); ) {\n switch (token) {\n case FieldDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n case RecordDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n default:\n currentField = token;\n break;\n }\n }\n if (currentField) {\n yield currentField;\n }\n }\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 return RecordDelimiter;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n return RecordDelimiter;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(this.#delimiterLength);\n return FieldDelimiter;\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n // If not flushing and the buffer doesn't end with a quote, then return null.\n if (this.#flush === false && this.#buffer.endsWith(this.#quotation)) {\n return null;\n }\n return this.#extractQuotedString();\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 this.#buffer = this.#buffer.slice(match[0].length);\n return { type: Field, value: match[0] };\n }\n\n // Otherwise, return null\n return null;\n }\n\n #extractQuotedString(): Token | null {\n let end = this.#quotationLength; // Skip the opening quote\n let value = \"\";\n\n while (end < this.#buffer.length) {\n // Escaped quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) ===\n this.#quotation &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength * 2,\n ) === this.#quotation\n ) {\n value += this.#quotation;\n end += this.#quotationLength * 2;\n continue;\n }\n\n // Closing quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) === this.#quotation\n ) {\n // If flushing and the buffer doesn't end with a quote, then return null\n if (\n this.#flush === false &&\n end + this.#quotationLength < this.#buffer.length &&\n this.#buffer.slice(\n end + this.#quotationLength,\n this.#delimiterLength,\n ) !== this.#delimiter &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 2 /** CRLF.length */,\n ) !== CRLF &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 1 /** LF.length */,\n ) !== LF\n ) {\n return null;\n }\n\n // Otherwise, return the quoted string\n this.#buffer = this.#buffer.slice(end + this.#quotationLength);\n return { type: Field, value };\n }\n\n value += this.#buffer[end];\n end++;\n }\n\n // If we get here, we've reached the end of the buffer\n return null;\n }\n}\n"],"names":["delimiter","delimiterLength","quotation","quotationLength","matcher","buffer","flush","constructor","COMMA","DOUBLE_QUOTE","assertCommonOptions","this","length","d","escapeRegExp","q","RegExp","lex","chunk","buffering","tokens","endsWith","CRLF","slice","LF","currentField","token","nextToken","FieldDelimiter","RecordDelimiter","startsWith","extractQuotedString","match","exec","type","Field","value","end"],"mappings":"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"}
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 { CommonOptions, Token } from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\nexport class Lexer {\n #delimiter: string;\n #delimiterLength: number;\n #quotation: string;\n #quotationLength: number;\n #matcher: RegExp;\n #buffer = \"\";\n #flush = false;\n\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#delimiterLength = delimiter.length;\n this.#quotation = quotation;\n this.#quotationLength = quotation.length;\n\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 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 public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\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, -CRLF.length);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -LF.length);\n }\n }\n let currentField: Token | null = null;\n for (let token: Token | null; (token = this.#nextToken()); ) {\n switch (token) {\n case FieldDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n case RecordDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n default:\n // If currentField is not null, append the new token's value to it\n if (currentField) {\n currentField.value += token.value;\n } else {\n currentField = token;\n }\n break;\n }\n }\n if (currentField) {\n yield currentField;\n }\n }\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 return RecordDelimiter;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n return RecordDelimiter;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(this.#delimiterLength);\n return FieldDelimiter;\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n // If not flushing and the buffer doesn't end with a quote, then return null.\n if (this.#flush === false && this.#buffer.endsWith(this.#quotation)) {\n return null;\n }\n return this.#extractQuotedString();\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 this.#buffer = this.#buffer.slice(match[0].length);\n return { type: Field, value: match[0] };\n }\n\n // Otherwise, return null\n return null;\n }\n\n #extractQuotedString(): Token | null {\n let end = this.#quotationLength; // Skip the opening quote\n let value = \"\";\n\n while (end < this.#buffer.length) {\n // Escaped quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) ===\n this.#quotation &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength * 2,\n ) === this.#quotation\n ) {\n value += this.#quotation;\n end += this.#quotationLength * 2;\n continue;\n }\n\n // Closing quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) === this.#quotation\n ) {\n // If flushing and the buffer doesn't end with a quote, then return null\n if (\n this.#flush === false &&\n end + this.#quotationLength < this.#buffer.length &&\n this.#buffer.slice(\n end + this.#quotationLength,\n this.#delimiterLength,\n ) !== this.#delimiter &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 2 /** CRLF.length */,\n ) !== CRLF &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 1 /** LF.length */,\n ) !== LF\n ) {\n return null;\n }\n\n // Otherwise, return the quoted string\n this.#buffer = this.#buffer.slice(end + this.#quotationLength);\n return { type: Field, value };\n }\n\n value += this.#buffer[end];\n end++;\n }\n\n // If we get here, we've reached the end of the buffer\n return null;\n }\n}\n"],"names":["delimiter","delimiterLength","quotation","quotationLength","matcher","buffer","flush","constructor","COMMA","DOUBLE_QUOTE","assertCommonOptions","this","length","d","escapeRegExp","q","RegExp","lex","chunk","buffering","tokens","endsWith","CRLF","slice","LF","currentField","token","nextToken","FieldDelimiter","RecordDelimiter","value","startsWith","extractQuotedString","match","exec","type","Field","end"],"mappings":"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"}
package/dist/es/Lexer.js CHANGED
@@ -65,7 +65,11 @@ class Lexer {
65
65
  yield token;
66
66
  break;
67
67
  default:
68
- currentField = token;
68
+ if (currentField) {
69
+ currentField.value += token.value;
70
+ } else {
71
+ currentField = token;
72
+ }
69
73
  break;
70
74
  }
71
75
  }
@@ -1 +1 @@
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 { CommonOptions, Token } from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\nexport class Lexer {\n #delimiter: string;\n #delimiterLength: number;\n #quotation: string;\n #quotationLength: number;\n #matcher: RegExp;\n #buffer = \"\";\n #flush = false;\n\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#delimiterLength = delimiter.length;\n this.#quotation = quotation;\n this.#quotationLength = quotation.length;\n\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 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 public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\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, -CRLF.length);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -LF.length);\n }\n }\n let currentField: Token | null = null;\n for (let token: Token | null; (token = this.#nextToken()); ) {\n switch (token) {\n case FieldDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n case RecordDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n default:\n currentField = token;\n break;\n }\n }\n if (currentField) {\n yield currentField;\n }\n }\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 return RecordDelimiter;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n return RecordDelimiter;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(this.#delimiterLength);\n return FieldDelimiter;\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n // If not flushing and the buffer doesn't end with a quote, then return null.\n if (this.#flush === false && this.#buffer.endsWith(this.#quotation)) {\n return null;\n }\n return this.#extractQuotedString();\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 this.#buffer = this.#buffer.slice(match[0].length);\n return { type: Field, value: match[0] };\n }\n\n // Otherwise, return null\n return null;\n }\n\n #extractQuotedString(): Token | null {\n let end = this.#quotationLength; // Skip the opening quote\n let value = \"\";\n\n while (end < this.#buffer.length) {\n // Escaped quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) ===\n this.#quotation &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength * 2,\n ) === this.#quotation\n ) {\n value += this.#quotation;\n end += this.#quotationLength * 2;\n continue;\n }\n\n // Closing quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) === this.#quotation\n ) {\n // If flushing and the buffer doesn't end with a quote, then return null\n if (\n this.#flush === false &&\n end + this.#quotationLength < this.#buffer.length &&\n this.#buffer.slice(\n end + this.#quotationLength,\n this.#delimiterLength,\n ) !== this.#delimiter &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 2 /** CRLF.length */,\n ) !== CRLF &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 1 /** LF.length */,\n ) !== LF\n ) {\n return null;\n }\n\n // Otherwise, return the quoted string\n this.#buffer = this.#buffer.slice(end + this.#quotationLength);\n return { type: Field, value };\n }\n\n value += this.#buffer[end];\n end++;\n }\n\n // If we get here, we've reached the end of the buffer\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
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 { CommonOptions, Token } from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\nexport class Lexer {\n #delimiter: string;\n #delimiterLength: number;\n #quotation: string;\n #quotationLength: number;\n #matcher: RegExp;\n #buffer = \"\";\n #flush = false;\n\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#delimiterLength = delimiter.length;\n this.#quotation = quotation;\n this.#quotationLength = quotation.length;\n\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 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 public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\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, -CRLF.length);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -LF.length);\n }\n }\n let currentField: Token | null = null;\n for (let token: Token | null; (token = this.#nextToken()); ) {\n switch (token) {\n case FieldDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n case RecordDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n default:\n // If currentField is not null, append the new token's value to it\n if (currentField) {\n currentField.value += token.value;\n } else {\n currentField = token;\n }\n break;\n }\n }\n if (currentField) {\n yield currentField;\n }\n }\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 return RecordDelimiter;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n return RecordDelimiter;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(this.#delimiterLength);\n return FieldDelimiter;\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n // If not flushing and the buffer doesn't end with a quote, then return null.\n if (this.#flush === false && this.#buffer.endsWith(this.#quotation)) {\n return null;\n }\n return this.#extractQuotedString();\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 this.#buffer = this.#buffer.slice(match[0].length);\n return { type: Field, value: match[0] };\n }\n\n // Otherwise, return null\n return null;\n }\n\n #extractQuotedString(): Token | null {\n let end = this.#quotationLength; // Skip the opening quote\n let value = \"\";\n\n while (end < this.#buffer.length) {\n // Escaped quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) ===\n this.#quotation &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength * 2,\n ) === this.#quotation\n ) {\n value += this.#quotation;\n end += this.#quotationLength * 2;\n continue;\n }\n\n // Closing quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) === this.#quotation\n ) {\n // If flushing and the buffer doesn't end with a quote, then return null\n if (\n this.#flush === false &&\n end + this.#quotationLength < this.#buffer.length &&\n this.#buffer.slice(\n end + this.#quotationLength,\n this.#delimiterLength,\n ) !== this.#delimiter &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 2 /** CRLF.length */,\n ) !== CRLF &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 1 /** LF.length */,\n ) !== LF\n ) {\n return null;\n }\n\n // Otherwise, return the quoted string\n this.#buffer = this.#buffer.slice(end + this.#quotationLength);\n return { type: Field, value };\n }\n\n value += this.#buffer[end];\n end++;\n }\n\n // If we get here, we've reached the end of the buffer\n return null;\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1,2 +1,2 @@
1
- !function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).CSV={})}(this,(function(A){"use strict";const I=Symbol.for("web-csv-toolbox.FieldDelimiter"),B=Symbol.for("web-csv-toolbox.RecordDelimiter"),Q=Symbol.for("web-csv-toolbox.Field"),g="\r\n",C="\n",E=",",i='"';function D(A){return A.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}class o{#A;#I;#B;#Q;#g;#C="";#E=!1;constructor({delimiter:A=E,quotation:I=i}={}){!function(A){if("string"==typeof A.quotation&&0===A.quotation.length)throw new Error("quotation must not be empty");if("string"==typeof A.delimiter&&0===A.delimiter.length)throw new Error("delimiter must not be empty");if(A.quotation.includes(C)||A.quotation.includes("\r"))throw new Error("quotation must not include CR or LF");if(A.delimiter.includes(C)||A.delimiter.includes("\r"))throw new Error("delimiter must not include CR or LF");if(A.delimiter.includes(A.quotation)||A.quotation.includes(A.delimiter))throw new Error("delimiter and quotation must not include each other as a substring")}({delimiter:A,quotation:I}),this.#A=A,this.#I=A.length,this.#B=I,this.#Q=I.length;const B=D(A),Q=D(I);this.#g=new RegExp(`^(?:(?!${Q})(?!${B})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${Q}|${B}|\\r|\\n|$)`)}lex(A,I=!1){return I||(this.#E=!0),"string"==typeof A&&0!==A.length&&(this.#C+=A),this.#i()}flush(){return this.#E=!0,[...this.#i()]}*#i(){this.#E&&(this.#C.endsWith(g)?this.#C=this.#C.slice(0,-2):this.#C.endsWith(C)&&(this.#C=this.#C.slice(0,-1)));let A=null;for(let Q;Q=this.#D();)switch(Q){case I:case B:A&&(yield A,A=null),yield Q;break;default:A=Q}A&&(yield A)}#D(){if(0===this.#C.length)return null;if(!1===this.#E&&(this.#C===g||this.#C===C))return null;if(this.#C.startsWith(g))return this.#C=this.#C.slice(2),B;if(this.#C.startsWith(C))return this.#C=this.#C.slice(1),B;if(this.#C.startsWith(this.#A))return this.#C=this.#C.slice(this.#I),I;if(this.#C.startsWith(this.#B))return!1===this.#E&&this.#C.endsWith(this.#B)?null:this.#o();const A=this.#g.exec(this.#C);return A?!1===this.#E&&A[0].length===this.#C.length?null:(this.#C=this.#C.slice(A[0].length),{type:Q,value:A[0]}):null}#o(){let A=this.#Q,I="";for(;A<this.#C.length;)if(this.#C.slice(A,A+this.#Q)!==this.#B||this.#C.slice(A+this.#Q,A+2*this.#Q)!==this.#B){if(this.#C.slice(A,A+this.#Q)===this.#B)return!1===this.#E&&A+this.#Q<this.#C.length&&this.#C.slice(A+this.#Q,this.#I)!==this.#A&&this.#C.slice(A+this.#Q,A+this.#Q+2)!==g&&this.#C.slice(A+this.#Q,A+this.#Q+1)!==C?null:(this.#C=this.#C.slice(A+this.#Q),{type:Q,value:I});I+=this.#C[A],A++}else I+=this.#B,A+=2*this.#Q;return null}}class w extends TransformStream{constructor(A={}){const I=new o(A);super({transform:(A,B)=>{0!==A.length&&B.enqueue([...I.lex(A,!0)])},flush:A=>{A.enqueue(I.flush())}})}}class G{#w=0;#G=[];#s;#N=!1;constructor(A={}){void 0!==A.header&&Array.isArray(A.header)&&this.#y(A.header)}*assemble(A,Q=!0){for(const g of A)switch(g){case I:this.#w++,this.#N=!0;break;case B:void 0===this.#s?this.#y(this.#G):this.#N?yield Object.fromEntries(this.#s.map(((A,I)=>[A,this.#G.at(I)]))):yield Object.fromEntries(this.#s.map((A=>[A,""]))),this.#w=0,this.#G=new Array(this.#s?.length).fill(""),this.#N=!1;break;default:this.#N=!0,this.#G[this.#w]=g.value}Q&&(yield*this.flush())}*flush(){void 0!==this.#s&&this.#N&&(yield Object.fromEntries(this.#s.filter((A=>A)).map(((A,I)=>[A,this.#G.at(I)]))))}#y(A){if(this.#s=A,0===this.#s.length)throw new Error("The header must not be empty.");if(new Set(this.#s).size!==this.#s.length)throw new Error("The header must not contain duplicate fields.")}}class s extends TransformStream{constructor(A={}){const I=new G(A);super({transform:(A,B)=>{for(const Q of I.assemble(A,!1))B.enqueue(Q)},flush:A=>{for(const B of I.flush())A.enqueue(B)}})}}function N(A,I){const B=new o(I),Q=new G(I),g=B.lex(A);return[...Q.assemble(g)]}function y(A,I){const B=new o(I),Q=new G(I),g=B.lex(A);return Q.assemble(g)}function a(A,I){const B=new o(I),Q=new G(I);return new ReadableStream({start(I){const g=B.lex(A);for(const A of Q.assemble(g))I.enqueue(A);I.close()}})}async function h(...A){const I=[];for await(const B of this(...A))I.push(B);return I}async function*F(A,I){yield*y(A,I)}function M(A,I){return new TextDecoder(I?.charset,{ignoreBOM:I?.ignoreBOM,fatal:I?.fatal}).decode(A instanceof ArrayBuffer?new Uint8Array(A):A)}function R(A,I={}){return y(M(A,I),I)}function k(A,I){return function(A){return{async next(){const I=A.next();return Promise.resolve(I)},[Symbol.asyncIterator](){return this}}}(R(A,I))}function c(A,...I){return new ReadableStream({start:B=>{I.reduce(((A,I)=>A.pipeThrough(I)),A).pipeTo(new WritableStream({write:A=>B.enqueue(A),close:()=>B.close()}))}})}function Y(A,I){const{charset:B,fatal:Q,ignoreBOM:g,decomposition:C}=I??{};return C?c(A,new DecompressionStream(C),new TextDecoderStream(B,{fatal:Q,ignoreBOM:g}),new w(I),new s(I)):c(A,new TextDecoderStream(B,{fatal:Q,ignoreBOM:g}),new w(I),new s(I))}async function*t(A){const I=A.getReader();for(;;){const{done:A,value:B}=await I.read();if(A)break;yield B}}function L(A,I){return t(Y(A,I))}function J(A,I){return c(A,new w(I),new s(I))}function U(A,I){return t(J(A,I))}function e(A,I={}){const{headers:B}=A,Q=B.get("content-type")??"text/csv",g=function(A){const[I,...B]=A.split(";"),Q={type:I.trim(),parameters:{}};for(const g of B){const[A,I]=g.split("=");Q.parameters[A.trim()]=I.trim()}return Q}(Q);if("text/csv"!==g.type)throw new Error(`Invalid mime type: ${Q}`);return{decomposition:B.get("content-encoding")??void 0,charset:g.parameters.charset??"utf-8",...I}}function S(A,I){const B=e(A,I);if(null===A.body)throw new Error("Response body is null");return L(A.body,B)}async function*K(A,I){if("string"==typeof A)yield*F(A,I);else if(A instanceof Uint8Array||A instanceof ArrayBuffer)yield*k(A,I);else if(A instanceof ReadableStream){const[B,Q]=A.tee(),g=B.getReader(),{value:C}=await g.read();g.releaseLock(),"string"==typeof C?yield*U(Q,I):C instanceof Uint8Array&&(yield*L(Q,I))}else A instanceof Response&&(yield*S(A,I))}let n;Object.defineProperties(F,{toArray:{enumerable:!0,writable:!1,value:h},toArraySync:{enumerable:!0,writable:!1,value:N},toIterableIterator:{enumerable:!0,writable:!1,value:y},toStream:{enumerable:!0,writable:!1,value:a}}),Object.defineProperties(k,{toArray:{enumerable:!0,writable:!1,value:h},toArraySync:{enumerable:!0,writable:!1,value:function(A,I={}){return N(M(A,I),I)}},toIterableIterator:{enumerable:!0,writable:!1,value:R},toStream:{enumerable:!0,writable:!1,value:function(A,I={}){return a(M(A,I),I)}}}),Object.defineProperties(L,{toArray:{enumerable:!0,writable:!1,value:h},toStream:{enumerable:!0,writable:!1,value:Y}}),Object.defineProperties(U,{toArray:{enumerable:!0,writable:!1,value:h},toStream:{enumerable:!0,writable:!1,value:J}}),Object.defineProperties(S,{toArray:{enumerable:!0,writable:!1,value:h},toStreamSync:{enumerable:!0,writable:!1,value:function(A,I){const B=e(A,I);if(null===A.body)throw new Error("Response body is null");return Y(A.body,B)}}}),Object.defineProperties(K,{toArray:{enumerable:!0,writable:!1,value:h}});const H="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&H.decode();let r=null;function q(){return null!==r&&0!==r.byteLength||(r=new Uint8Array(n.memory.buffer)),r}const l=new Array(128).fill(void 0);l.push(void 0,null,!0,!1);let d=l.length;let Z=0;const x="undefined"!=typeof TextEncoder?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},b="function"==typeof x.encodeInto?function(A,I){return x.encodeInto(A,I)}:function(A,I){const B=x.encode(A);return I.set(B),{read:A.length,written:B.length}};function f(A){const I=function(A){return l[A]}(A);return function(A){A<132||(l[A]=d,d=A)}(A),I}function W(A,I){const B=function(A,I,B){if(void 0===B){const B=x.encode(A),Q=I(B.length,1)>>>0;return q().subarray(Q,Q+B.length).set(B),Z=B.length,Q}let Q=A.length,g=I(Q,1)>>>0;const C=q();let E=0;for(;E<Q;E++){const I=A.charCodeAt(E);if(I>127)break;C[g+E]=I}if(E!==Q){0!==E&&(A=A.slice(E)),g=B(g,Q,Q=E+3*A.length,1)>>>0;const I=q().subarray(g+E,g+Q);E+=b(A,I).written}return Z=E,g}(A,n.__wbindgen_malloc,n.__wbindgen_realloc),Q=Z;return f(n.parseStringToArraySync(B,Q,I))}function m(){const A={wbg:{}};return A.wbg.__wbindgen_string_new=function(A,I){var B,Q;return function(A){d===l.length&&l.push(l.length+1);const I=d;return d=l[I],l[I]=A,I}((B=A,Q=I,B>>>=0,H.decode(q().subarray(B,B+Q))))},A}async function u(A){if(void 0!==n)return n;void 0===A&&(A="/web_csv_toolbox_wasm_bg.wasm");const I=m();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:B,module:Q}=await async function(A,I){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,I)}catch(B){if("application/wasm"==A.headers.get("Content-Type"))throw B;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",B)}const Q=await A.arrayBuffer();return await WebAssembly.instantiate(Q,I)}{const B=await WebAssembly.instantiate(A,I);return B instanceof WebAssembly.Instance?{instance:B,module:A}:B}}(await A,I);return function(A,I){return n=A.exports,u.__wbindgen_wasm_module=I,r=null,n}(B,Q)}A.Field=Q,A.FieldDelimiter=I,A.LexerTransformer=w,A.RecordAssemblerTransformer=s,A.RecordDelimiter=B,A.loadWASM=async function(A){await u(A??"data:application/wasm;base64,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IAQpAwgiJyAJrSIpUQ0DIAYpAwBQRQ0BQgAMAgsgBEEBOgA8QQAhCAwCCyAGKQMYIS0gBikDECEuIAYpAwghKEIBCyEqIApBOGogLTcDACAKQTBqIC43AwAgCkEoaiAoNwMAIAogKjcDICAKICk3AxggCiAnNwMQIApBAjYCCCAKQQhqEGEhBUEBIQgLIAQtAD1BBnFBAkYEQCAOEAULIAhBCHYhDAwOCyAIIAJB6ILAABA9AAsgCSADQdiCwAAQPQALQeCAwAAQewALQbCBwAAQewALQZyCwAAQewALQQEgAhCCAQALQQQgCBCCAQALIAggAkHogsAAED0ACyAJIANB2ILAABA9AAtB4IDAABB7AAtBsIHAABB7AAtBnILAABB7AAsgDhAFQQAhCAwBC0EAIQgLIApBCGogDigCABATAkACQAJAIAooAghFBEAgCEH/AXENAUEBIQsMAwtBACELIA4oAgBBLGpBADYCACAIQf8BcUUNAQtBACELDAELIApBEGoiAigCACEDIAooAgwhBSAKQTBqICw3AwAgCkEoaiAvNwMAIApBIGogKzcDACACIAM2AgAgCkIBNwMYIAogBTYCDCAKQQE2AgggCkEIahBhIQULIAQtAD1BBnFBAkYEQCAOEAYLAn9BASALRQ0AGkECIAxB/wFxRQ0AGkHVrcEALQAAGiAOKAIAIQJBwABBCBBuIgVFDQYgBUEANgI4IAVCgICAgBA3AzBCACEnIAVCADcDKCAFQoCAgIDAADcDICACKQMAUEUEQCACQRhqKQMAISwgAkEQaikDACErIAIpAwghKUIBIScLIAUgLDcDGCAFICs3AxAgBSApNwMIIAUgJzcDACACQSRqKAIAIQQCQCACQShqKAIAIgNFBEBBBCEIQQAhCwwBCyADQf////8BSw0CIANBAnQiC0EASA0CQdWtwQAtAAAaIAtBBBBuIghFDQMLIAggBCALEIYBIQQgBSACQSxqIgYoAgA2AiwgBSADNgIoIAUgBDYCJCAFIAM2AiAgBigCACIDIAIoAigiBEsNAwJAAkACQCADRQRAIAJBNGooAgAhAgwBCyACKAIkIANBAnRqQQRrKAIAIgMgAkE4aigCACIESw0HIAJBNGooAgAhAiADDQELQQEhC0EAIQMMAQsgA0EASA0CQdWtwQAtAAAaIANBARBuIgtF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QCACIAdqIgBBBGsgDCAMQpDOAIAiDUKQzgB+faciAUH//wNxQeQAbiIEQQF0QaOMwABqLwAAOwAAIABBAmsgASAEQeQAbGtB//8DcUEBdEGjjMAAai8AADsAACACQQRrIQIgDEL/wdcvViANIQwNAAsMBQsgAEEQaisDACIUIBRiIBS9Qv///////////wCDQoCAgICAgID4/wBRckUEQCMAQaACayIAJAAgFL0iDUL/////////B4MhDCANQgBTBEAgB0EtOgAAQQEhBAsCQAJ/An8CQAJAIA1CNIinQf8PcSIBRSAMUHFFBEAgAUECSSAMQgBSciEGIAxCgICAgICAgAiEIAwgARsiDEIChiEOIAxCAYMhEiABQbUIa0HMdyABGyIBQQBIBEAgAEGQAmpBwM7AACABIAFBhaJTbEEUdiABQX9HayICaiIDQQR0IgFrKQMAIgwgDkIChCIPEDogAEGAAmpByM7AACABaykDACINIA8QOiAAQfABaiAAQZgCaikDACIPIAApA4ACfCIQIABBiAJqKQMAIA8gEFatfCACIANBsdm1H2xBE3ZrQTxqQf8AcSIBEEMgAEGwAWogDCAOIAatQn+FfCIPEDogAEGgAWogDSAPEDogAEGQAWogAEG4AWopAwAiDyAAKQOgAXwiECAAQagBaikDACAPIBBWrXwgARBDIABB4AFqIAwgDhA6IABB0AFqIA0gDhA6IABBwAFqIABB6AFqKQMAIgwgACkD0AF8Ig0gAEHYAWopAwAgDCANVq18IAEQQyAAKQPAASEPIAApA5ABIRAgACkD8AEhDCACQQJPBEAgDkJ/IAKthkJ/hYNQRSACQT5Lcg0DDAQLIAwgEn0hDEEBIQggBiASUHEMBAsgAEGAAWogAUHB6ARsQRJ2IAFBA0trIgNBBHQiAkHgo8AAaikDACIMIA5CAoQiDRA6IABB8ABqIAJB6KPAAGopAwAiDyANEDogAEHgAGogAEGIAWopAwAiECAAKQNwfCIRIABB+ABqKQMAIBAgEVatfCADIAFrIANBz6bKAGxBE3ZqQT1qQf8AcSIBEEMgAEEgaiAMIA4gBq0iEUJ/hXwiEBA6IABBEGogDyAQEDogACAAQShqKQMAIhAgACkDEHwiEyAAQRhqKQMAIBAgE1atfCABEEMgAEHQAGogDCAOEDogAEFAayAP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IgtBB3FFBEAgCwwBC0EAIQVBACAGQQdxayEGA0AgACgCmAMhACAGIAVBAWsiBUcNAAsgBSAEawshBCALQQhJDQIDQCAAKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMhACAEQQhrIgQNAAsMAgsgAygCCCEGDAYLIAhBAWohCSAAIQILIAIgCEEMbGoiBUGUAmooAgAhBiAFQZACaigCACEFIAMoAggiBCADKAIARgRAIAMgBEEBEC0gAygCCCEECyADKAIEIARqQSw6AAAgAyAEQQFqNgIIIAdBKGogAyAFIAYQCyAHLQAoQQRHDQMgAiAIQRhsaiADKAIIIgIgAygCAEYEQCADIAJBARAtIAMoAgghAgsgAygCBCACakE6OgAAIAMgAkEBajYCCCABEAMiAkUNAAsMBgtBkInAABB7AAtBkInAABB7AAsgByAHKQMoNwMAIAcQVSECDAMLIAYgAygCAEYEQCADIAZBARAtIAMoAgghBgsgAygCBCAGakH9ADoAACADIAZBAWo2AghBACECDAILIA2nIghB4wBLBEAgByACQQJrIgJqIA2nIgAgAEH//wNxQeQAbiIIQeQAbGtB//8DcUEBdEGjjMAAai8AADsAAAsCQCAIQQpPBEAgByACQQJrIgBqIAhBAXRBo4zAAGovAAA7AAAMAQsgByACQQFrIgBqIAhBMGo6AAALIA5CAFMEQCAHIABBAWsiAGpBLToAAAtBFCAAayIBIAUoAgAgBSgCCCICa0sEQCAFIAIgARAtIAUoAgghAgsgBSgCBCACaiAAIAdqIAEQhgEaIAUgASACajYCCEEAIQIMAQsgDaciAEHjAEsEQCAHIAJBAmsiAmogDaciACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0QaOMwABqLwAAOwAACwJAIABBCk8EQCAHIAJBAmsiAmogAEEBdEGjjMAAai8AADsAAAwBCyAHIAJBAWsiAmogAEEwajoAAAtBFCACayIBIAUoAgAgBSgCCCIAa0sEQCAFIAAgARAtIAUoAgghAAsgBSgCBCAAaiACIAdqIAEQhgEaIAUgACABajYCCEEAIQILIAdBMGokACACC+oNAhJ/AX4CQCADQQNJDQAgAS0ArQMNACACLwAAIAJBAmotAABBEHRyQe/3/gVHDQBBAyETIAJBA2oh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BUGQo8AAED8ACyABIA1B0KPAABBAAAsgCCACQZCjwAAQPwALQYCjwAAQewALAkACQCACIAVNBEAgAygCNCACaiAKIAsQhgEaAkAgAygCLCICIAMoAigiAUkEQCABIQgMAQsgAUEASA0CIAFBBCABQQF0IgYgBkEETRsiCEkEQCAIIAEiAmsiBiADKAIgIAFrSwRAIBQgASAGECogAygCKCECCyADKAIkIgogAkECdGohCSAGQQJPBEAgCUEAIAggAUF/c2pBAnQQhQEaIAogAiAIaiABa0ECdGpBBGshCSACIAZqQQFrIQILIAlBADYCACACQQFqIQggAygCLCECCyADIAg2AigLIAIgCEkNAiACIAhBsKPAABA+AAsgAiAFQeCiwAAQQAALQaCjwAAQewALIAMoAiQgAkECdGogBTYCACADIAMoAixBAWoiCDYCLCANIQEgEEEBaiIQIA9HDQALCyAHKAIwBEAgBygCNBAPCyAHKAIgBEAgBygCJBAPCyAHEA8gACADNgIACyAOQRBqJAAPCyACIAFB8KLAABA/AAsgDyACQZCjwAAQPwALQQhBwAAQggEAC0EEIAYQggEAC0EBIAUQggEACxBYAAsgBSACQfCiwAAQPwALIAEgAkGQo8AAED8AC/QGAQh/AkAgACgCACIKIAAoAggiA3IEQAJAIANFDQAgASACaiEIIABBDGooAgBBAWohByABIQUDQAJAIAUhAyAHQQFrIgdFDQAgAyAIRg0CAn8gAywAACIGQQBOBEAgBkH/AXEhBiADQQFqDAELIAMtAAFBP3EhCSAGQR9xIQUgBkFfTQRAIAVBBnQgCXIhBiADQQJqDAELIAMtAAJBP3EgCUEGdHIhCSAGQXBJBEAgCSAFQQx0ciEGIANBA2oMAQsgBUESdEGAgPAAcSADLQADQT9xIAlBBnRyciIGQYCAxABGDQMgA0EEagsiBSAEIANraiEEIAZBgIDEAEcNAQwCCwsgAyAIRg0AIAMsAAAiBUEATiAFQWBJciAFQXBJckUEQCAFQf8BcUESdEGAgPAAcSADLQADQT9xIAMtAAJBP3FBBnQgAy0AAUE/cUEMdHJyckGAgMQARg0BCwJAAkAgBEUNACACIARNBEBBACEDIAIgBEYNAQwCC0EAIQMgASAEaiwAAEFASA0BCyABIQMLIAQgAiADGyECIAMgASADGyEBCyAKRQ0BIAAoAgQhCAJAIAJBEE8EQCABIAIQCCEDDAELIAJFBEBBACEDDAELIAJBA3EhBwJAIAJBBEkEQEEAIQNBACEGDAELIAJBfHEhBUEAIQNBACEGA0AgAyABIAZqIgQsAABBv39KaiAEQQFqLAAAQb9/SmogBEECaiwAAEG/f0pqIARBA2osAABBv39KaiEDIAUgBkEEaiIGRw0ACwsgB0UNACABIAZqIQUDQCADIAUsAABBv39KaiEDIAVBAWohBSAHQQFrIgcNAAsLAkAgAyAISQRAIAggA2shBEEAIQMCQAJAAkAgAC0AIEEBaw4CAAECCyAEIQNBACEEDAELIARBAXYhAyAEQQFqQQF2IQQLIANBAWohAyAAQRhqKAIAIQUgACgCECEGIAAoAhQhAANAIANBAWsiA0UNAiAAIAYgBSgCEBEAAEUNAAtBAQ8LDAILQQEhAyAAIAEgAiAFKAIMEQEABH8gAwVBACEDAn8DQCAEIAMgBEYNARogA0EBaiEDIAAgBiAFKAIQEQAARQ0ACyADQQFrCyAESQsPCyAAKAIUIAEgAiAAQRhqKAIAKAIMEQEADwsgACgCFCABIAIgAEEYaigCACgCDBEBAAviBgEIfwJAAkAgASAAQQNqQXxxIgIgAGsiCEkNACABIAhrIgZBBEkNACAGQQNxIQdBACEBAkAgACACRiIJDQACQCACIABBf3NqQQNJBEAMAQsDQCABIAAgBGoiAywAAEG/f0pqIANBAWosAABBv39KaiADQQJqLAAAQb9/SmogA0EDaiwAAEG/f0pqIQEgBEEEaiIEDQALCyAJDQAgACACayEDIAAgBGohAgNAIAEgAiwAAEG/f0pqIQEgAkEBaiECIANBAWoiAw0ACwsgACAIaiEEAkAgB0UNACAEIAZBfHFqIgAsAABBv39KIQUgB0EBRg0AIAUgACwAAUG/f0pqIQUgB0ECRg0AIAUgACwAAkG/f0pqIQULIAZBAnYhBiABIAVqIQMDQCAEIQAgBkUNAkHAASAGIAZBwAFPGyIEQQNxIQUgBEECdCEIAkAgBEH8AXEiB0UEQEEAIQIMAQsgACAHQQJ0aiEJQQAhAiAAIQEDQCACIAEoAgAiAkF/c0EHdiACQQZ2ckGBgoQIcWogAUEEaigCACICQX9zQQd2IAJBBnZyQYGChAhxaiABQQhqKAIAIgJBf3NBB3YgAkEGdnJBgYKECHFqIAFBDGooAgAiAkF/c0EHdiACQQZ2ckGBgoQIcWohAiABQRBqIgEgCUcNAAsLIAYgBGshBiAAIAhqIQQgAkEIdkH/gfwHcSACQf+B/AdxakGBgARsQRB2IANqIQMgBUUNAAsCfyAAIAdBAnRqIgAoAgAiAUF/c0EHdiABQQZ2ckGBgoQIcSIBIAVBAUYNABogASAAKAIEIgFBf3NBB3YgAUEGdnJBgYKECHFqIgEgBUECRg0AGiAAKAIIIgBBf3NBB3YgAEEGdnJBgYKECHEgAWoLIgFBCHZB/4EccSABQf+B/AdxakGBgARsQRB2IANqIQMMAQsgAUUEQEEADwsgAUEDcSEEAkAgAUEESQRAQQAhAgwBCyABQXxxIQVBACECA0AgAyAAIAJqIgEsAABBv39KaiABQQFqLAAAQb9/SmogAUECaiwAAEG/f0pqIAFBA2osAABBv39KaiEDIAUgAkEEaiICRw0ACwsgBEUNACAAIAJqIQEDQCADIAEsAABBv39KaiEDIAFBAWohASAEQQFrIgQNAAsLIAMLpAcBCn8jAEEwayIFJAAgACgCACEHAkACfyAAKAIgIggEQCAAKAIEIQMDQCAAIAhBAWsiCDYCIAJAAkACfwJAAkACQCAHRSADckUEQCAAKAIIIQEgACgCDCIERQ0DIARBB3EiAw0BIAQhAgwCCyAHRQ0EIAAoAgwhBCADIQEgACgCCAwDCyAEIQIDQCACQQFrIQIgASgCmAMhASADQQFrIgMNAAsLIARBCEkNAANAIAEoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAyEBIAJBCGsiAg0ACwsgAEIANwIIIAAgATYCBEEBIQcgAEEBNgIAQQAhBEEACyECAkAgAS8BkgMgBE0EQANAIAEoAogCIgNFDQIgAS8BkAMhBCABEA8gAkEBaiECIAQgAyIBLwGSA08NAAsLIARBAWohCSACRQRAIAEhAwwDCyABIAlBAnRqQZgDaigCACEDQQAhCSACQQFrIgZFDQIgAkECayAGQQdxIgIEQANAIAZBAWshBiADKAKYAyEDIAJBAWsiAg0ACwtBB0kNAgNAIAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAyEDIAZBCGsiBg0ACwwCCyABEA9BgInAABB7AAtB8IjAABB7AAsgACAJNgIMIABBADYCCCAAIAM2AgQgASAEQQxsakGMAmoiAigCAARAIAIoAgQQDwsCQAJAAkACQCABIARBGGxqIgEtAAAOBQMDAwECAAsCfyABKAIEIgJFBEBBACEEQQAMAQsgAUEMaigCACEEIAUgAUEIaigCACIBNgIoIAUgAjYCJCAFQQA2AiAgBSABNgIYIAUgAjYCFCAFQQA2AhBBAQshASAFIAQ2AiwgBSABNgIcIAUgATYCDCAFQQxqEAkMAgsgASgCBEUNASABQQhqKAIAEA8MAQsgAUEEahAmIAEoAgRFDQAgAUEIaigCABAPCyAIDQALIABBADYCAEEADAELIABBADYCACAHRQ0BIAAoAggiASAAKAIEIgMNABoCQCAAKAIMIgBFDQACQCAAQQdxIgNFBEAgACECDAELIAAhAgNAIAJBAWshAiABKAKYAyEBIANBAWsiAw0ACwsgAEEISQ0AA0AgASgCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMoApgDIQEgAkEIayICDQALCyABIQNBAAshAQNAIAMoAogCIAMQDyABQQFqIQEiAw0ACwsgBUEwaiQAC+IGAg5/AX4jAEEgayIDJABBASENAkACQCACKAIUIgxBIiACQRhqKAIAIg8oAhAiDhEAAA0AAkAgAUUEQEEAIQJBACEBDAELIAAgAWohEEEAIQIgACEEAkACQANAAkAgBCIILAAAIgpBAE4EQCAIQQFqIQQgCkH/AXEhCQwBCyAILQABQT9xIQQgCkEfcSEGIApBX00EQCAGQQZ0IARyIQkgCEECaiEEDAELIAgtAAJBP3EgBEEGdHIhByAIQQNqIQQgCkFwSQRAIAcgBkEMdHIhCQwBCyAGQRJ0QYCA8ABxIAQtAABBP3EgB0EGdHJyIglBgIDEAEYNAyAIQQRqIQQLIANBBGogCUGBgAQQDAJAAkAgAy0ABEGAAUYNACADLQAPIAMtAA5rQf8BcUEBRg0AIAIgBUsNAwJAIAJFDQAgASACTQRAIAEgAkYNAQwFCyAAIAJqLAAAQUBIDQQLAkAgBUUNACABIAVNBEAgASAFRg0BDAULIAAgBWosAABBv39MDQQLAkACQCAMIAAgAmogBSACayAPKAIMEQEADQAgA0EYaiIHIANBDGooAgA2AgAgAyADKQIEIhE3AxAgEadB/wFxQYABRgRAQYABIQYDQAJAIAZBgAFHBEAgAy0AGiILIAMtABtPDQUgAyALQQFqOgAaIAtBCk8NByADQRBqIAtqLQAAIQIMAQtBACEGIAdBADYCACADKAIUIQIgA0IANwMQCyAMIAIgDhEAAEUNAAsMAQtBCiADLQAaIgIgAkEKTRshCyADLQAbIgcgAiACIAdJGyEKA0AgAiAKRg0CIAMgAkEBaiIHOgAaIAIgC0YNBCADQRBqIAJqIQYgByECIAwgBi0AACAOEQAARQ0ACwsMBwsCf0EBIAlBgAFJDQAaQQIgCUGAEEkNABpBA0EEIAlBgIAESRsLIAVqIQILIAUgCGsgBGohBSAEIBBHDQEMAwsLIAtBCkHopMEAED4ACyAAIAEgAiAFQfiSwQAQbQALIAJFBEBBACECDAELAkAgASACTQRAIAEgAkYNAQwECyAAIAJqLAAAQb9/TA0DCyABIAJrIQELIAwgACACaiABIA8oAgwRAQANACAMQSIgDhEAACENCyADQSBqJAAgDQ8LIAAgASACIAFB6JLBABBtAAu1BgELfyABKAIIIgUgASgCAEYEQCABIAVBARAtIAEoAgghBQsgASgCBCAFakEiOgAAIAEgBUEBaiIENgIIIAJBAWshDCADQX9zIQ0gAiADaiEOIAIhCgNAQQAhBQJAIAECfwJAAkACQAJAAkACQAJAAkACQAJAAkADQCAOIAUgCmoiB0YEQCADIAZHBEAgBgRAIAMgBk0NBCACIAZqLAAAQb9/TA0EIAMgBmshAwsgAyABKAIAIARrSwRAIAEgBCADEC0gASgCCCEECyABKAIEIARqIAIgBmogAxCGARogASADIARqIgQ2AggLIAQgASgCAEYEQCABIARBARAtIAEoAgghBAsgASgCBCAEakEiOgAAIABBBDoAACABIARBAWo2AggPCyAFQQFqIQUgBy0AACIIQdSQwABqLQAAIgtFDQALIAUgBmoiB0EBayIJIAZLBEACQCAGRQ0AIAMgBk0EQCADIAZGDQEMDwsgAiAGaiwAAEFASA0OCwJAIAMgCU0EQCAHIA1qDQ8MAQsgBiAMaiAFaiwAAEG/f0wNDgsgBUEBayIJIAEoAgAgBGtLBEAgASAEIAkQLSABKAIIIQQLIAEoAgQgBGogAiAGaiAJEIYBGiABIAQgBWpBAWsiBDYCCAsgBSAKaiEKIAtB3ABrDhoBCQkJCQkHCQkJBgkJCQkJCQkFCQkJBAkDAggLIAIgAyAGIANB8IvAABBtAAtBl4zAACEFDAgLIAhBD3FBxJDAAGotAAAhBSAIQQR2QcSQwABqLQAAIQggASgCACAEa0EFTQRAIAEgBEEGEC0gASgCCCEECyABKAIEIARqIgYgBToABSAGIAg6AAQgBkHc6sGBAzYAACAEQQZqDAgLQaGMwAAhBQwGC0GfjMAAIQUMBQtBnYzAACEFDAQLQZuMwAAhBQwDC0GZjMAAIQUMAgtBlYzAACEFIAtBIkYNAQtB2IrAAEEoQeCLwAAQTwALIAEoAgAgBGtBAU0EQCABIARBAhAtIAEoAgghBAsgASgCBCAEaiAFLwAAOwAAIARBAmoLIgQ2AgggByEGDAELCyACIAMgBiAFIAZqQQFrQYCMwAAQbQALnQsBBX8jAEEQayIDJAACQAJAAkACQAJAAkACQAJAAkACQCABDigFCAgICAgICAgBAwgIAggICAgICAgICAgICAgICAgICAgIBggICAgHAAsgAUHcAEYNAwwHCyAAQYAEOwEKIABCADcBAiAAQdzoATsBAAwHCyAAQYAEOwEKIABCADcBAiAAQdzkATsBAAwGCyAAQYAEOwEKIABCADcBAiAAQdzcATsBAAwFCyAAQYAEOwEKIABCADcBAiAAQdy4ATsBAAwECyAAQYAEOwEKIABCADcBAiAAQdzgADsBAAwDCyACQYCABHFFDQEgAEGABDsBCiAAQgA3AQIgAEHcxAA7AQAMAgsgAkGAAnFFDQAgAEGABDsBCiAAQgA3AQIgAEHczgA7AQAMAQsCQAJAAkACQCACQQFxBEACfyABQQt0IQJBISEGQSEhBQJAA0AgAiAGQQF2IARqIgZBAnRB+KTBAGooAgBBC3QiB0cEQCAGIAUgAiAHSRsiBSAGQQFqIAQgAiAHSxsiBGshBiAEIAVJDQEMAgsLIAZBAWohBAsCfwJ/AkAgBEEgTQRAIARBAnQiBUH4pMEAaigCAEEVdiECIARBIEcNAUHXBSEFQR8MAgsgBEEhQZikwQAQPgALIAVB/KTBAGooAgBBFXYhBUEAIARFDQEaIARBAWsLQQJ0QfikwQBqKAIAQf///wBxCyEEAkACQCAFIAJBf3NqRQ0AIAEgBGshB0HXBSACIAJB1wVNGyEGIAVBAWshBUEAIQQDQCACIAZGDQIgBCACQfylwQBqLQAAaiIEIAdLDQEgBSACQQFqIgJHDQALIAUhAgsgAkEBcQwBCyAGQdcFQaikwQAQPgALDQELAn8CQCABQSBJDQACQAJ/QQEgAUH/AEkNABogAUGAgARJDQECQCABQYCACE8EQCABQbDHDGtB0LorSSABQcumDGtBBUlyIAFBnvQLa0HiC0kgAUHh1wtrQZ8YSXJyIAFBfnFBnvAKRiABQaKdC2tBDklycg0EIAFBYHFB4M0KRw0BDAQLIAFB9JjBAEEsQcyZwQBBxAFBkJvBAEHCAxAaDAQLQQAgAUG67gprQQZJDQAaIAFBgIDEAGtB8IN0SQsMAgsgAUHSnsEAQShBop/BAEGfAkHBocEAQa8CEBoMAQtBAAtFDQEgACABNgIEIABBgAE6AAAMBAsgA0EIakEAOgAAIANBADsBBiADQf0AOgAPIAMgAUEPcUGgj8EAai0AADoADiADIAFBBHZBD3FBoI/BAGotAAA6AA0gAyABQQh2QQ9xQaCPwQBqLQAAOgAMIAMgAUEMdkEPcUGgj8EAai0AADoACyADIAFBEHZBD3FBoI/BAGotAAA6AAogAyABQRR2QQ9xQaCPwQBqLQAAOgAJIAFBAXJnQQJ2QQJrIgFBC08NASADQQZqIAFqIgJB0qTBAC8AADsAACACQQJqQdSkwQAtAAA6AAAgACADKQEGNwAAIABBCGogA0EOai8BADsAACAAQQo6AAsgACABOgAKDAMLIANBCGpBADoAACADQQA7AQYgA0H9ADoADyADIAFBD3FBoI/BAGotAAA6AA4gAyABQQR2QQ9xQaCPwQBqLQAAOgANIAMgAUEIdkEPcUGgj8EAai0AADoADCADIAFBDHZBD3FBoI/BAGotAAA6AAsgAyABQRB2QQ9xQaCPwQBqLQAAOgAKIAMgAUEUdkEPcUGgj8EAai0AADoACSABQQFyZ0ECdkECayIBQQtPDQEgA0EGaiABaiICQdKkwQAvAAA7AAAgAkECakHUpMEALQAAOgAAIAAgAykBBjcAACAAQQhqIANBDmovAQA7AAAgAEEKOgALIAAgAToACgwCCyABQQpB2KTBABA9AAsgAUEKQdikwQAQPQALIANBEGokAAvKBQIIfwR+IwBBIGsiBCQAQdWtwQAtAAAaAkACQAJAAkBBwABBCBBuIgIEQCABKQMAUAR+QgAFIAFBGGopAwAhCiABQRBqKQMAIQsgASkDCCEMQgELIQ0gAUE0aigCACEFAkAgAUE4aigCACIHRQRAQQEhAwwBCyAHQQBIDQJB1a3BAC0AABogB0EBEG4iA0UNAwsgAyAFIAcQhgEhBiABQSRqKAIAIQUCQCABQShqKAIAIghFBEBBBCEJQQAhAwwBCyAIQf////8BSw0CIAhBAnQiA0EASA0CQdWtwQAtAAAaIANBBBBuIglFDQQLIAkgBSADEIYBIQMgAiAHNgI4IAIgBjYCNCACIAc2AjAgAiAINgIoIAIgAzYCJCACIAg2AiAgAiAKNwMYIAIgCzcDECACIAw3AwggAiANNwMAIAIgAUEsaigCADYCLCAEQRBqIAIQEyAEQRhqKAIAIQYCfyAEKAIQIgVFBEAgAiEDQQAMAQsgBCgCFCEDIAIoAjAEQCACKAI0EA8LIAIoAiAEQCACKAIkEA8LIAIQD0EBCyECIAQgBjYCCCAEIAM2AgQgBCACNgIAIAQgATYCDAJAIAAtAD1BAWsOAwAFAAULIAVFBEAgBEEEahAGCyAEQQxqEAUgBCgCDCEBDAQLQQhBwAAQggEACxBYAAtBASAHEIIBAAtBBCADEIIBAAsgBEEYaiICIARBCGooAgA2AgAgBCAEKQIANwMQIABBEGohBQJAIAAoAhAiA0ECRg0AIABBHGooAgAiBigCMARAIAZBNGooAgAQDwsgBigCIARAIAZBJGooAgAQDwsgBhAPIAMNACAAQRRqKAIAIgMoAjAEQCADQTRqKAIAEA8LIAMoAiAEQCADQSRqKAIAEA8LIAMQDwsgBSAEKQMQNwMAIABBHGogATYCACAFQQhqIAIoAgA2AgAgBEEgaiQAC9sFAQd/An8gAUUEQCAAKAIcIQhBLSEKIAVBAWoMAQtBK0GAgMQAIAAoAhwiCEEBcSIBGyEKIAEgBWoLIQYCQCAIQQRxRQRAQQAhAgwBCwJAIANBEE8EQCACIAMQCCEBDAELIANFBEBBACEBDAELIANBA3EhCQJAIANBBEkEQEEAIQEMAQsgA0F8cSEMQQAhAQNAIAEgAiAHaiILLAAAQb9/SmogC0EBaiwAAEG/f0pqIAtBAmosAABBv39KaiALQQNqLAAAQb9/SmohASAMIAdBBGoiB0cNAAsLIAlFDQAgAiAHaiEHA0AgASAHLAAAQb9/SmohASAHQQFqIQcgCUEBayIJDQALCyABIAZqIQYLAkACQCAAKAIARQRAQQEhASAAKAIUIgYgACgCGCIAIAogAiADEFENAQwCCyAGIAAoAgQiB08EQEEBIQEgACgCFCIGIAAoAhgiACAKIAIgAxBRDQEMAgsgCEEIcQRAIAAoAhAhCyAAQTA2AhAgAC0AICEMQQEhASAAQQE6ACAgACgCFCIIIAAoAhgiCSAKIAIgAxBRDQEgByAGa0EBaiEBAkADQCABQQFrIgFFDQEgCEEwIAkoAhARAABFDQALQQEPC0EBIQEgCCAEIAUgCSgCDBEBAA0BIAAgDDoAICAAIAs2AhBBACEBDAELIAcgBmshBgJAAkACQCAALQAgIgFBAWsOAwABAAILIAYhAUEAIQYMAQsgBkEBdiEBIAZBAWpBAXYhBgsgAUEBaiEBIABBGGooAgAhByAAKAIQIQggACgCFCEAAkADQCABQQFrIgFFDQEgACAIIAcoAhARAABFDQALQQEPC0EBIQEgACAHIAogAiADEFENACAAIAQgBSAHKAIMEQEADQBBACEBA0AgASAGRgRAQQAPCyABQQFqIQEgACAIIAcoAhARAABFDQALIAFBAWsgBkkPCyABDwsgBiAEIAUgACgCDBEBAAv8BQEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAAkACQCADQQFxDQAgA0EDcUUNASABKAIAIgMgAGohACABIANrIgFBuLHBACgCAEYEQCACKAIEQQNxQQNHDQFBsLHBACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEBgLAkACQCACKAIEIgNBAnFFBEAgAkG8scEAKAIARg0CIAJBuLHBACgCAEYNBSACIANBeHEiAhAYIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQbixwQAoAgBHDQFBsLHBACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAECBBACEBQdCxwQBB0LHBACgCAEEBayIANgIAIAANAUGYr8EAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQdCxwQBB/x8gASABQf8fTRs2AgAPC0G8scEAIAE2AgBBtLHBAEG0scEAKAIAIABqIgA2AgAgASAAQQFyNgIEQbixwQAoAgAgAUYEQEGwscEAQQA2AgBBuLHBAEEANgIACyAAQcixwQAoAgAiA00NAEG8scEAKAIAIgJFDQBBACEBAkBBtLHBACgCACIEQSlJDQBBkK/BACEAA0AgAiAAKAIAIgVPBEAgBSAAKAIEaiACSw0CCyAAKAIIIgANAAsLQZivwQAoAgAiAARAA0AgAUEBaiEBIAAoAggiAA0ACwtB0LHBAEH/HyABIAFB/x9NGzYCACADIARPDQBByLHBAEF/NgIACw8LIABBeHFBoK/BAGohAgJ/QaixwQAoAgAiA0EBIABBA3Z0IgBxRQRAQaixwQAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtBuLHBACABNgIAQbCxwQBBsLHBACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgALlgUBC38jAEEwayIDJAAgA0EkaiABNgIAIANBAzoALCADQSA2AhwgA0EANgIoIAMgADYCICADQQA2AhQgA0EANgIMAn8CQAJAAkAgAigCECILRQRAIAJBDGooAgAiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEIIAIoAgAhAANAIABBBGooAgAiBgRAIAMoAiAgACgCACAGIAMoAiQoAgwRAQANBAsgASgCACADQQxqIAFBBGooAgARAAANAyAFQQFqIQUgAEEIaiEAIAFBCGoiASAERw0ACwwBCyACQRRqKAIAIgBFDQAgAEEFdCEMIABBAWtB////P3FBAWohCCACKAIIIQYgAigCACEAA0AgAEEEaigCACIBBEAgAygCICAAKAIAIAEgAygCJCgCDBEBAA0DCyADIAUgC2oiAUEQaigCADYCHCADIAFBHGotAAA6ACwgAyABQRhqKAIANgIoIAFBDGooAgAhB0EAIQpBACEEAkACQAJAIAFBCGooAgBBAWsOAgACAQsgB0EDdCAGaiINKAIEQcUARw0BIA0oAgAoAgAhBwtBASEECyADIAc2AhAgAyAENgIMIAFBBGooAgAhBAJAAkACQCABKAIAQQFr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ACEHQQYhAQwBC0EAIQdBBSEBQQAhCwtB1a3BAC0AABogBSgCBCEIQZgDQQgQbiIORQ0DIA5BADYCiAIgDiAALwGSAyIMIAFBf3NqIg07AZIDIANBKGogACABQRhsaiIFQQhqKQMANwMAIANBMGogBUEQaikDADcDACADIAUpAwA3AyAgDUEMTw0EIAwgAUEBaiIMayANRw0NIABBjAJqIg8gAUEMbGoiBSkCBCEbIAUoAgAhBSAOQYwCaiAPIAxBDGxqIA1BDGwQhgEaIA4gACAMQRhsaiANQRhsEIYBIQ8gA0HsAGogA0EoaikDADcCACADQfQAaiADQTBqKQMANwIAIAAgATsBkgMgAyADKQMgNwJkIANByABqIANB6ABqKQMANwMAIANB0ABqIANB8ABqKQMANwMAIANB2ABqIANB+ABqKAIANgIAIAMgAykDYDcDQCAAIA8gBxsiDUGMAmogC0EMbGohAQJAIAsgDS8BkgMiDE8EQCABIAIpAgA3AgAgAUEIaiACQQhqKAIANgIADAELIAFBDGogASAMIAtrIgpBDGwQhwEgAUEIaiACQQhqKAIANgIAIAEgAikCADcCACANIAtBGGxqIgFBGGogASAKQRhsEIcBCyAIQQAgBxshFSANIAtBGGxqIgFBEGogBEEQaikDADcDACABIAQpAwA3AwAgA0EIaiICIANByABqKQMANwMAIANBEGoiByADQdAAaikDADcDACADQRhqIgogA0HYAGooAgA2AgAgAUEIaiAEQQhqKQMANwMAIA0gDEEBajsBkgMgAyADKQNANwMAIAVBgICAgHhHDQEgDSEACyATIAs2AgggEyAVNgIEIBMgADYCAAwBCyADQThqIAooAgA2AgAgA0EwaiAHKQMANwMAIANBKGogAikDADcDACADIAMpAwA3AyACQAJAIAAoAogCIgFFBEBBACEHDAELIANB4ABqQQRyIRYgA0EgakEEciERQQAhByAbIRogBSECA0AgByAIRw0GIAAvAZADIQACQAJAIAEiBC8BkgMiB0ELTwRAQQEhEiAAQQVPDQEgACEBQQQhAAwCCyAEQYwCaiIIIABBDGxqIQUgAEEBaiEBIAdBAWohDAJAIAAgB08EQCAFIBo3AgQgBSACNgIAIAQgAEEYbGoiAiARKQIANwIAIAJBEGogEUEQaikCADcC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ASAFRgRAIAIgAUEBEC0gAigCCCEBCyACKAIEIAFqQSw6AAAgAiABQQFqNgIIIANBGGshAyAEIAAQAyEBIARBGGohBCABRQ0BDAQLCyABIAVHDQELIAIgAUEBEC0gAigCCCEBCyACKAIEIAFqQd0AOgAAIAIgAUEBajYCCEEAIQELIAEL+gEBBH8jAEEwayIBJAAgACgCCCIDBEAgACgCBCEAA0ACQAJAAkACQCAALQAADgUDAwMBAgALAn8gAEEEaigCACICRQRAQQAhAkEADAELIAEgAjYCJCABQQA2AiAgASACNgIUIAFBADYCECABIABBCGooAgAiAjYCKCABIAI2AhggAEEMaigCACECQQELIQQgASACNgIsIAEgBDYCHCABIAQ2AgwgAUEMahAJDAILIABBBGooAgBFDQEgAEEIaigCABAPDAELIABBBGoiAhAmIAIoAgBFDQAgAEEIaigCABAPCyAAQRhqIQAgA0EBayIDDQALCyABQTBqJAAL+gEBBH8jAEEwayIBJAAgACgCCCIDBEAgACgCBCEAA0ACQAJAAkACQCAALQAADgUDAwMBAgALAn8gAEEEaigCACICRQRAQQAhAkEADAELIAEgAjYCJCABQQA2AiAgASACNgIUIAFBADYCECABIABBCGooAgAiAjYCKCABIAI2AhggAEEMaigCACECQQELIQQgASACNgIsIAEgBDYCHCABIAQ2AgwgAUEMahARDAILIABBBGooAgBFDQEgAEEIaigCABAPDAELIABBBGoiAhAnIAIoAgBFDQAgAEEIaigCABAPCyAAQRhqIQAgA0EBayIDDQALCyABQTBqJAALkwIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAIAAoAgAiAC0AAEEBaw4GAQIDBAUGAAsgAiAAQQRqNgIMIAFBpI/AAEEHIAJBDGpBrI/AABArDAYLIAIgAEEEajYCDCABQbyPwABBCyACQQxqQayPwAAQKwwFCyABQcePwABBEhBpDAQLIAIgAEEEajYCDCABQdmPwABBCyACQQxqQeSPwAAQKwwDCyACIABBAWo2AgwgAUH0j8AAQQkgAkEMakGAkMAAECsMAgsgAiAAQQFqNgIMIAFBkJDAAEEIIAJBDGpBmJDAABArDAELIAIgAEEBajYCDCABQaiQwABBCiACQQxqQbSQ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XwAAACEIAABAAAAAZmFsc2VcIlxcXGJcZlxuXHJcdDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5UG9zaXRpb25ieXRlABUAAAAIAAAACAAAABYAAABsaW5lcmVjb3JkAAAXAAAABAAAAAQAAAANAAAATm9uZVNvbWUXAAAABAAAAAQAAAAYAAAARW1wdHlJbnZhbGlkUGFyc2VGbG9hdEVycm9ya2luZAAXAAAABAAAAAQAAAAZAAAARGVzZXJpYWxpemVFcnJvcmZpZWxkAAAAFQAAABAAAAAIAAAAGgAAABcAAAAEAAAABAAAABsAAABNZXNzYWdlABcAAAAEAAAABAAAAA4AAABVbnN1cHBvcnRlZFVuZXhwZWN0ZWRFbmRPZlJvd0ludmFsaWRVdGY4FwAAAAQAAAAEAAAAHAAAAFBhcnNlQm9vbAAAABcAAAAEAAAABAAAAB0AAABQYXJzZUludBcAAAAEAAAABAAAAB4AAABQYXJzZUZsb2F0AAAXAAAABAAAAAQAAAAfAAAAMDEyMzQ1Njc4OWFiY2RlZnV1dXV1dXV1YnRudWZydXV1dXV1dXV1dXV1dXV1dXV1AAAiAEGwkcAACwFcAEHUksAAC40RIgAAAAwAAAAEAAAAIwAAACQAAAAlAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAmAAAAAAAAAAEAAAAnAAAAL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzALQJEABLAAAAMwoAAA4AAABFcnJvckVPRiB3aGlsZSBwYXJzaW5nIGEgbGlzdEVPRiB3aGlsZSBwYXJzaW5nIGFuIG9iamVjdEVPRiB3aGlsZSBwYXJzaW5nIGEgc3RyaW5nRU9GIHdoaWxlIHBhcnNpbmcgYSB2YWx1ZWV4cGVjdGVkIGA6YGV4cGVjdGVkIGAsYCBvciBgXWBleHBlY3RlZCBgLGAgb3IgYH1gZXhwZWN0ZWQgaWRlbnRleHBlY3RlZCB2YWx1ZWV4cGVjdGVkIGAiYGludmFsaWQgZXNjYXBlaW52YWxpZCBudW1iZXJudW1iZXIgb3V0IG9mIHJhbmdlaW52YWxpZCB1bmljb2RlIGNvZGUgcG9pbnRjb250cm9sIGNoYXJhY3RlciAoXHUwMDAwLVx1MDAxRikgZm91bmQgd2hpbGUgcGFyc2luZyBhIHN0cmluZ2tleSBtdXN0IGJlIGEgc3RyaW5naW52YWxpZCB2YWx1ZTogZXhwZWN0ZWQga2V5IHRvIGJlIGEgbnVtYmVyIGluIHF1b3Rlc2Zsb2F0IGtleSBtdXN0IGJlIGZpbml0ZSAoZ290IE5hTiBvciArLy1pbmYpbG9uZSBsZWFkaW5nIHN1cnJvZ2F0ZSBpbiBoZXggZXNjYXBldHJhaWxpbmcgY29tbWF0cmFpbGluZyBjaGFyYWN0ZXJzdW5leHBlY3RlZCBlbmQgb2YgaGV4IGVzY2FwZXJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZEVycm9yKCwgbGluZTogLCBjb2x1bW46ICkAAEkMEAAGAAAATwwQAAgAAABXDBAACgAAAGEMEAABAAAAL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbWFwL2VudHJ5LnJzhAwQAGAAAABwAQAANgAAAGFzc2VydGlvbiBmYWlsZWQ6IGlkeCA8IENBUEFDSVRZL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbm9kZS5yc2Fzc2VydGlvbiBmYWlsZWQ6IGVkZ2UuaGVpZ2h0ID09IHNlbGYuaGVpZ2h0IC0gMQAUDRAAWwAAAK8CAAAJAAAAFA0QAFsAAACzAgAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNyYy5sZW4oKSA9PSBkc3QubGVuKCkUDRAAWwAAAC8HAAAFAAAAFA0QAFsAAACvBAAAIwAAABQNEABbAAAA7wQAACQAAABhc3NlcnRpb24gZmFpbGVkOiBlZGdlLmhlaWdodCA9PSBzZWxmLm5vZGUuaGVpZ2h0IC0gMQAAABQNEABbAAAA8AMAAAkAAAAvcnVzdGMvYjExZmJmYmYzNTFiOTRjN2VlY2Y5ZTY3NDlhNDU0NGE2ZDQ3MTdmYS9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwBgDhAAXwAAAFkCAAAwAAAAL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnMA0A4QAF8AAADHAAAAJwAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NlcmRlX2pzb24tMS4wLjExMy9zcmMvdmFsdWUvaW5kZXgucnNjYW5ub3QgYWNjZXNzIGtleSAgaW4gSlNPTiAAAKcPEAASAAAAuQ8QAAkAAABADxAAZwAAAGYAAAASAAAAbnVsbGJvb2xlYW5udW1iZXJzdHJpbmdhcnJheW9iamVjdAAAKgAAAAwAAAAEAAAAKwAAACwAAAAlAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvY3N2LTEuMy4wL3NyYy9ieXRlX3JlY29yZC5ycwAAIBAQAF4AAACPAQAAFgAAACAQEABeAAAA9AEAABcAAAAgEBAAXgAAABMCAAA6AAAAIBAQAF4AAAC1AgAAEwAAACAQEABeAAAAyQIAADYAAAAgEBAAXgAAANMCAAASAAAAIBAQAF4AAAA0AwAAFwAAACAQEABeAAAANwMAACIAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9jc3YtMS4zLjAvc3JjL2J5dGVfcmVjb3Jk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MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5MC4wL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvY3N2LWNvcmUtMC4xLjExL3NyYy9yZWFkZXIucnMAAQcCAwQFBggJaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZWs8EABfAAAANQMAABIAAABrPBAAXwAAAHkEAAA7AAAAazwQAF8AAACIBAAACgAAAGs8EABfAAAAjgQAAAkAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvY3N2LWNvcmUtMC4xLjExL3NyYy9saWIucnNkPRAAXAAAAIoAAAASAAAAZD0QAFwAAACSAAAAEgAAADEAAAAMAAAABAAAADIAAAAzAAAANAAAAOA9EAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZWZpbGVzeXN0ZW0gcXVvdGEgZXhjZWVkZWRmaWxlIHRvbyBsYXJnZXJlc291cmNlIGJ1c3lleGVjdXRhYmxlIGZpbGUgYnVzeWRlYWRsb2NrY3Jvc3MtZGV2aWNlIGxpbmsgb3IgcmVuYW1ldG9vIG1hbnkgbGlua3NpbnZhbGlkIGZpbGVuYW1lYXJndW1lbnQgbGlzdCB0b28gbG9uZ29wZXJhdGlvbiBpbnRlcnJ1cHRlZHVuc3VwcG9ydGVkdW5leHBlY3RlZCBlbmQgb2YgZmlsZW91dCBvZiBtZW1vcnlvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPc2NvZGUANQAAAAQAAAAEAAAANgAAAGtpbmQ3AAAAAQAAAAEAAAA4AAAAbWVzc2FnZQAxAAAADAAAAAQAAAA5AAAAS2luZEVycm9yAAAANQAAAAgAAAAEAAAAOgAAAEN1c3RvbWVycm9yADUAAAAEAAAABAAAADsAAAAgKG9zIGVycm9yICngPRAAAAAAAGhBEAALAAAAc0EQAAEAAABtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAACMQRAAFQAAAKFBEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzwEEQABgAAABiAQAACQAAAGxpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnPoQRAAHAAAAIYCAAAeAAAAMQAAAAwAAAAEAAAAPAAAADUAAAAIAAAABAAAAD0AAAA1AAAACAAAAAQAAAA+AAAAPwAAAEAAAAAQAAAABAAAAEEAAABCAAAAQwAAAAAAAAABAAAARAAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90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")},A.parse=K,A.parseBinary=k,A.parseResponse=S,A.parseString=F,A.parseStringStream=U,A.parseStringToArraySyncWASM=function(A,I={}){const{delimiter:B=E,quotation:Q=i}=I;if("string"!=typeof B||1!==B.length)throw new Error("Invalid delimiter, must be a single character on WASM.");if(Q!==i)throw new Error("Invalid quotation, must be double quote on WASM.");const g=B.charCodeAt(0);return JSON.parse(W(A,g))},A.parseUint8ArrayStream=L,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})}));
1
+ !function(A,I){"object"==typeof exports&&"undefined"!=typeof module?I(exports):"function"==typeof define&&define.amd?define(["exports"],I):I((A="undefined"!=typeof globalThis?globalThis:A||self).CSV={})}(this,(function(A){"use strict";const I=Symbol.for("web-csv-toolbox.FieldDelimiter"),B=Symbol.for("web-csv-toolbox.RecordDelimiter"),Q=Symbol.for("web-csv-toolbox.Field"),g="\r\n",C="\n",E=",",i='"';function D(A){return A.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}class o{#A;#I;#B;#Q;#g;#C="";#E=!1;constructor({delimiter:A=E,quotation:I=i}={}){!function(A){if("string"==typeof A.quotation&&0===A.quotation.length)throw new Error("quotation must not be empty");if("string"==typeof A.delimiter&&0===A.delimiter.length)throw new Error("delimiter must not be empty");if(A.quotation.includes(C)||A.quotation.includes("\r"))throw new Error("quotation must not include CR or LF");if(A.delimiter.includes(C)||A.delimiter.includes("\r"))throw new Error("delimiter must not include CR or LF");if(A.delimiter.includes(A.quotation)||A.quotation.includes(A.delimiter))throw new Error("delimiter and quotation must not include each other as a substring")}({delimiter:A,quotation:I}),this.#A=A,this.#I=A.length,this.#B=I,this.#Q=I.length;const B=D(A),Q=D(I);this.#g=new RegExp(`^(?:(?!${Q})(?!${B})(?![\\r\\n]))([\\S\\s\\uFEFF\\xA0]+?)(?=${Q}|${B}|\\r|\\n|$)`)}lex(A,I=!1){return I||(this.#E=!0),"string"==typeof A&&0!==A.length&&(this.#C+=A),this.#i()}flush(){return this.#E=!0,[...this.#i()]}*#i(){this.#E&&(this.#C.endsWith(g)?this.#C=this.#C.slice(0,-2):this.#C.endsWith(C)&&(this.#C=this.#C.slice(0,-1)));let A=null;for(let Q;Q=this.#D();)switch(Q){case I:case B:A&&(yield A,A=null),yield Q;break;default:A?A.value+=Q.value:A=Q}A&&(yield A)}#D(){if(0===this.#C.length)return null;if(!1===this.#E&&(this.#C===g||this.#C===C))return null;if(this.#C.startsWith(g))return this.#C=this.#C.slice(2),B;if(this.#C.startsWith(C))return this.#C=this.#C.slice(1),B;if(this.#C.startsWith(this.#A))return this.#C=this.#C.slice(this.#I),I;if(this.#C.startsWith(this.#B))return!1===this.#E&&this.#C.endsWith(this.#B)?null:this.#o();const A=this.#g.exec(this.#C);return A?!1===this.#E&&A[0].length===this.#C.length?null:(this.#C=this.#C.slice(A[0].length),{type:Q,value:A[0]}):null}#o(){let A=this.#Q,I="";for(;A<this.#C.length;)if(this.#C.slice(A,A+this.#Q)!==this.#B||this.#C.slice(A+this.#Q,A+2*this.#Q)!==this.#B){if(this.#C.slice(A,A+this.#Q)===this.#B)return!1===this.#E&&A+this.#Q<this.#C.length&&this.#C.slice(A+this.#Q,this.#I)!==this.#A&&this.#C.slice(A+this.#Q,A+this.#Q+2)!==g&&this.#C.slice(A+this.#Q,A+this.#Q+1)!==C?null:(this.#C=this.#C.slice(A+this.#Q),{type:Q,value:I});I+=this.#C[A],A++}else I+=this.#B,A+=2*this.#Q;return null}}class w extends TransformStream{constructor(A={}){const I=new o(A);super({transform:(A,B)=>{0!==A.length&&B.enqueue([...I.lex(A,!0)])},flush:A=>{A.enqueue(I.flush())}})}}class G{#w=0;#G=[];#s;#N=!1;constructor(A={}){void 0!==A.header&&Array.isArray(A.header)&&this.#y(A.header)}*assemble(A,Q=!0){for(const g of A)switch(g){case I:this.#w++,this.#N=!0;break;case B:void 0===this.#s?this.#y(this.#G):this.#N?yield Object.fromEntries(this.#s.map(((A,I)=>[A,this.#G.at(I)]))):yield Object.fromEntries(this.#s.map((A=>[A,""]))),this.#w=0,this.#G=new Array(this.#s?.length).fill(""),this.#N=!1;break;default:this.#N=!0,this.#G[this.#w]=g.value}Q&&(yield*this.flush())}*flush(){void 0!==this.#s&&this.#N&&(yield Object.fromEntries(this.#s.filter((A=>A)).map(((A,I)=>[A,this.#G.at(I)]))))}#y(A){if(this.#s=A,0===this.#s.length)throw new Error("The header must not be empty.");if(new Set(this.#s).size!==this.#s.length)throw new Error("The header must not contain duplicate fields.")}}class s extends TransformStream{constructor(A={}){const I=new G(A);super({transform:(A,B)=>{for(const Q of I.assemble(A,!1))B.enqueue(Q)},flush:A=>{for(const B of I.flush())A.enqueue(B)}})}}function N(A,I){const B=new o(I),Q=new G(I),g=B.lex(A);return[...Q.assemble(g)]}function y(A,I){const B=new o(I),Q=new G(I),g=B.lex(A);return Q.assemble(g)}function a(A,I){const B=new o(I),Q=new G(I);return new ReadableStream({start(I){const g=B.lex(A);for(const A of Q.assemble(g))I.enqueue(A);I.close()}})}async function h(...A){const I=[];for await(const B of this(...A))I.push(B);return I}async function*F(A,I){yield*y(A,I)}function M(A,I){return new TextDecoder(I?.charset,{ignoreBOM:I?.ignoreBOM,fatal:I?.fatal}).decode(A instanceof ArrayBuffer?new Uint8Array(A):A)}function R(A,I={}){return y(M(A,I),I)}function k(A,I){return function(A){return{async next(){const I=A.next();return Promise.resolve(I)},[Symbol.asyncIterator](){return this}}}(R(A,I))}function c(A,...I){return new ReadableStream({start:B=>{I.reduce(((A,I)=>A.pipeThrough(I)),A).pipeTo(new WritableStream({write:A=>B.enqueue(A),close:()=>B.close()}))}})}function Y(A,I){const{charset:B,fatal:Q,ignoreBOM:g,decomposition:C}=I??{};return C?c(A,new DecompressionStream(C),new TextDecoderStream(B,{fatal:Q,ignoreBOM:g}),new w(I),new s(I)):c(A,new TextDecoderStream(B,{fatal:Q,ignoreBOM:g}),new w(I),new s(I))}async function*t(A){const I=A.getReader();for(;;){const{done:A,value:B}=await I.read();if(A)break;yield B}}function L(A,I){return t(Y(A,I))}function J(A,I){return c(A,new w(I),new s(I))}function U(A,I){return t(J(A,I))}function e(A,I={}){const{headers:B}=A,Q=B.get("content-type")??"text/csv",g=function(A){const[I,...B]=A.split(";"),Q={type:I.trim(),parameters:{}};for(const g of B){const[A,I]=g.split("=");Q.parameters[A.trim()]=I.trim()}return Q}(Q);if("text/csv"!==g.type)throw new Error(`Invalid mime type: ${Q}`);return{decomposition:B.get("content-encoding")??void 0,charset:g.parameters.charset??"utf-8",...I}}function S(A,I){const B=e(A,I);if(null===A.body)throw new Error("Response body is null");return L(A.body,B)}async function*K(A,I){if("string"==typeof A)yield*F(A,I);else if(A instanceof Uint8Array||A instanceof ArrayBuffer)yield*k(A,I);else if(A instanceof ReadableStream){const[B,Q]=A.tee(),g=B.getReader(),{value:C}=await g.read();g.releaseLock(),"string"==typeof C?yield*U(Q,I):C instanceof Uint8Array&&(yield*L(Q,I))}else A instanceof Response&&(yield*S(A,I))}let n;Object.defineProperties(F,{toArray:{enumerable:!0,writable:!1,value:h},toArraySync:{enumerable:!0,writable:!1,value:N},toIterableIterator:{enumerable:!0,writable:!1,value:y},toStream:{enumerable:!0,writable:!1,value:a}}),Object.defineProperties(k,{toArray:{enumerable:!0,writable:!1,value:h},toArraySync:{enumerable:!0,writable:!1,value:function(A,I={}){return N(M(A,I),I)}},toIterableIterator:{enumerable:!0,writable:!1,value:R},toStream:{enumerable:!0,writable:!1,value:function(A,I={}){return a(M(A,I),I)}}}),Object.defineProperties(L,{toArray:{enumerable:!0,writable:!1,value:h},toStream:{enumerable:!0,writable:!1,value:Y}}),Object.defineProperties(U,{toArray:{enumerable:!0,writable:!1,value:h},toStream:{enumerable:!0,writable:!1,value:J}}),Object.defineProperties(S,{toArray:{enumerable:!0,writable:!1,value:h},toStreamSync:{enumerable:!0,writable:!1,value:function(A,I){const B=e(A,I);if(null===A.body)throw new Error("Response body is null");return Y(A.body,B)}}}),Object.defineProperties(K,{toArray:{enumerable:!0,writable:!1,value:h}});const H="undefined"!=typeof TextDecoder?new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}):{decode:()=>{throw Error("TextDecoder not available")}};"undefined"!=typeof TextDecoder&&H.decode();let r=null;function q(){return null!==r&&0!==r.byteLength||(r=new Uint8Array(n.memory.buffer)),r}const l=new Array(128).fill(void 0);l.push(void 0,null,!0,!1);let d=l.length;let Z=0;const x="undefined"!=typeof TextEncoder?new TextEncoder("utf-8"):{encode:()=>{throw Error("TextEncoder not available")}},b="function"==typeof x.encodeInto?function(A,I){return x.encodeInto(A,I)}:function(A,I){const B=x.encode(A);return I.set(B),{read:A.length,written:B.length}};function f(A){const I=function(A){return l[A]}(A);return function(A){A<132||(l[A]=d,d=A)}(A),I}function W(A,I){const B=function(A,I,B){if(void 0===B){const B=x.encode(A),Q=I(B.length,1)>>>0;return q().subarray(Q,Q+B.length).set(B),Z=B.length,Q}let Q=A.length,g=I(Q,1)>>>0;const C=q();let E=0;for(;E<Q;E++){const I=A.charCodeAt(E);if(I>127)break;C[g+E]=I}if(E!==Q){0!==E&&(A=A.slice(E)),g=B(g,Q,Q=E+3*A.length,1)>>>0;const I=q().subarray(g+E,g+Q);E+=b(A,I).written}return Z=E,g}(A,n.__wbindgen_malloc,n.__wbindgen_realloc),Q=Z;return f(n.parseStringToArraySync(B,Q,I))}function m(){const A={wbg:{}};return A.wbg.__wbindgen_string_new=function(A,I){var B,Q;return function(A){d===l.length&&l.push(l.length+1);const I=d;return d=l[I],l[I]=A,I}((B=A,Q=I,B>>>=0,H.decode(q().subarray(B,B+Q))))},A}async function u(A){if(void 0!==n)return n;void 0===A&&(A="/web_csv_toolbox_wasm_bg.wasm");const I=m();("string"==typeof A||"function"==typeof Request&&A instanceof Request||"function"==typeof URL&&A instanceof URL)&&(A=fetch(A));const{instance:B,module:Q}=await async function(A,I){if("function"==typeof Response&&A instanceof Response){if("function"==typeof WebAssembly.instantiateStreaming)try{return await WebAssembly.instantiateStreaming(A,I)}catch(B){if("application/wasm"==A.headers.get("Content-Type"))throw B;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",B)}const Q=await A.arrayBuffer();return await WebAssembly.instantiate(Q,I)}{const B=await WebAssembly.instantiate(A,I);return B instanceof WebAssembly.Instance?{instance:B,module:A}:B}}(await A,I);return function(A,I){return n=A.exports,u.__wbindgen_wasm_module=I,r=null,n}(B,Q)}A.Field=Q,A.FieldDelimiter=I,A.LexerTransformer=w,A.RecordAssemblerTransformer=s,A.RecordDelimiter=B,A.loadWASM=async function(A){await u(A??"data:application/wasm;base64,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IAQpAwgiJyAJrSIpUQ0DIAYpAwBQRQ0BQgAMAgsgBEEBOgA8QQAhCAwCCyAGKQMYIS0gBikDECEuIAYpAwghKEIBCyEqIApBOGogLTcDACAKQTBqIC43AwAgCkEoaiAoNwMAIAogKjcDICAKICk3AxggCiAnNwMQIApBAjYCCCAKQQhqEGEhBUEBIQgLIAQtAD1BBnFBAkYEQCAOEAULIAhBCHYhDAwOCyAIIAJB6ILAABA9AAsgCSADQdiCwAAQPQALQeCAwAAQewALQbCBwAAQewALQZyCwAAQewALQQEgAhCCAQALQQQgCBCCAQALIAggAkHogsAAED0ACyAJIANB2ILAABA9AAtB4IDAABB7AAtBsIHAABB7AAtBnILAABB7AAsgDhAFQQAhCAwBC0EAIQgLIApBCGogDigCABATAkACQAJAIAooAghFBEAgCEH/AXENAUEBIQsMAwtBACELIA4oAgBBLGpBADYCACAIQf8BcUUNAQtBACELDAELIApBEGoiAigCACEDIAooAgwhBSAKQTBqICw3AwAgCkEoaiAvNwMAIApBIGogKzcDACACIAM2AgAgCkIBNwMYIAogBTYCDCAKQQE2AgggCkEIahBhIQULIAQtAD1BBnFBAkYEQCAOEAYLAn9BASALRQ0AGkECIAxB/wFxRQ0AGkHVrcEALQAAGiAOKAIAIQJBwABBCBBuIgVFDQYgBUEANgI4IAVCgICAgBA3AzBCACEnIAVCADcDKCAFQoCAgIDAADcDICACKQMAUEUEQCACQRhqKQMAISwgAkEQaikDACErIAIpAwghKUIBIScLIAUgLDcDGCAFICs3AxAgBSApNwMIIAUgJzcDACACQSRqKAIAIQQCQCACQShqKAIAIgNFBEBBBCEIQQAhCwwBCyADQf////8BSw0CIANBAnQiC0EASA0CQdWtwQAtAAAaIAtBBBBuIghFDQMLIAggBCALEIYBIQQgBSACQSxqIgYoAgA2AiwgBSADNgIoIAUgBDYCJCAFIAM2AiAgBigCACIDIAIoAigiBEsNAwJAAkACQCADRQRAIAJBNGooAgAhAgwBCyACKAIkIANBAnRqQQRrKAIAIgMgAkE4aigCACIESw0HIAJBNGooAgAhAiADDQELQQEhC0EAIQMMAQsgA0EASA0CQdWtwQAtAAAaIANBARBuIgtF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QCACIAdqIgBBBGsgDCAMQpDOAIAiDUKQzgB+faciAUH//wNxQeQAbiIEQQF0QaOMwABqLwAAOwAAIABBAmsgASAEQeQAbGtB//8DcUEBdEGjjMAAai8AADsAACACQQRrIQIgDEL/wdcvViANIQwNAAsMBQsgAEEQaisDACIUIBRiIBS9Qv///////////wCDQoCAgICAgID4/wBRckUEQCMAQaACayIAJAAgFL0iDUL/////////B4MhDCANQgBTBEAgB0EtOgAAQQEhBAsCQAJ/An8CQAJAIA1CNIinQf8PcSIBRSAMUHFFBEAgAUECSSAMQgBSciEGIAxCgICAgICAgAiEIAwgARsiDEIChiEOIAxCAYMhEiABQbUIa0HMdyABGyIBQQBIBEAgAEGQAmpBwM7AACABIAFBhaJTbEEUdiABQX9HayICaiIDQQR0IgFrKQMAIgwgDkIChCIPEDogAEGAAmpByM7AACABaykDACINIA8QOiAAQfABaiAAQZgCaikDACIPIAApA4ACfCIQIABBiAJqKQMAIA8gEFatfCACIANBsdm1H2xBE3ZrQTxqQf8AcSIBEEMgAEGwAWogDCAOIAatQn+FfCIPEDogAEGgAWogDSAPEDogAEGQAWogAEG4AWopAwAiDyAAKQOgAXwiECAAQagBaikDACAPIBBWrXwgARBDIABB4AFqIAwgDhA6IABB0AFqIA0gDhA6IABBwAFqIABB6AFqKQMAIgwgACkD0AF8Ig0gAEHYAWopAwAgDCANVq18IAEQQyAAKQPAASEPIAApA5ABIRAgACkD8AEhDCACQQJPBEAgDkJ/IAKthkJ/hYNQRSACQT5Lcg0DDAQLIAwgEn0hDEEBIQggBiASUHEMBAsgAEGAAWogAUHB6ARsQRJ2IAFBA0trIgNBBHQiAkHgo8AAaikDACIMIA5CAoQiDRA6IABB8ABqIAJB6KPAAGopAwAiDyANEDogAEHgAGogAEGIAWopAwAiECAAKQNwfCIRIABB+ABqKQMAIBAgEVatfCADIAFrIANBz6bKAGxBE3ZqQT1qQf8AcSIBEEMgAEEgaiAMIA4gBq0iEUJ/hXwiEBA6IABBEGogDyAQEDogACAAQShqKQMAIhAgACkDEHwiEyAAQRhqKQMAIBAgE1atfCABEEMgAEHQAGogDCAOEDogAEFAayAP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IgtBB3FFBEAgCwwBC0EAIQVBACAGQQdxayEGA0AgACgCmAMhACAGIAVBAWsiBUcNAAsgBSAEawshBCALQQhJDQIDQCAAKAKYAygCmAMoApgDKAKYAygCmAMoApgDKAKYAygCmAMhACAEQQhrIgQNAAsMAgsgAygCCCEGDAYLIAhBAWohCSAAIQILIAIgCEEMbGoiBUGUAmooAgAhBiAFQZACaigCACEFIAMoAggiBCADKAIARgRAIAMgBEEBEC0gAygCCCEECyADKAIEIARqQSw6AAAgAyAEQQFqNgIIIAdBKGogAyAFIAYQCyAHLQAoQQRHDQMgAiAIQRhsaiADKAIIIgIgAygCAEYEQCADIAJBARAtIAMoAgghAgsgAygCBCACakE6OgAAIAMgAkEBajYCCCABEAMiAkUNAAsMBgtBkInAABB7AAtBkInAABB7AAsgByAHKQMoNwMAIAcQVSECDAMLIAYgAygCAEYEQCADIAZBARAtIAMoAgghBgsgAygCBCAGakH9ADoAACADIAZBAWo2AghBACECDAILIA2nIghB4wBLBEAgByACQQJrIgJqIA2nIgAgAEH//wNxQeQAbiIIQeQAbGtB//8DcUEBdEGjjMAAai8AADsAAAsCQCAIQQpPBEAgByACQQJrIgBqIAhBAXRBo4zAAGovAAA7AAAMAQsgByACQQFrIgBqIAhBMGo6AAALIA5CAFMEQCAHIABBAWsiAGpBLToAAAtBFCAAayIBIAUoAgAgBSgCCCICa0sEQCAFIAIgARAtIAUoAgghAgsgBSgCBCACaiAAIAdqIAEQhgEaIAUgASACajYCCEEAIQIMAQsgDaciAEHjAEsEQCAHIAJBAmsiAmogDaciACAAQf//A3FB5ABuIgBB5ABsa0H//wNxQQF0QaOMwABqLwAAOwAACwJAIABBCk8EQCAHIAJBAmsiAmogAEEBdEGjjMAAai8AADsAAAwBCyAHIAJBAWsiAmogAEEwajoAAAtBFCACayIBIAUoAgAgBSgCCCIAa0sEQCAFIAAgARAtIAUoAgghAAsgBSgCBCAAaiACIAdqIAEQhgEaIAUgACABajYCCEEAIQILIAdBMGokACACC+oNAhJ/AX4CQCADQQNJDQAgAS0ArQMNACACLwAAIAJBAmotAABBEHRyQe/3/gVHDQBBAyETIAJBA2oh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BUGQo8AAED8ACyABIA1B0KPAABBAAAsgCCACQZCjwAAQPwALQYCjwAAQewALAkACQCACIAVNBEAgAygCNCACaiAKIAsQhgEaAkAgAygCLCICIAMoAigiAUkEQCABIQgMAQsgAUEASA0CIAFBBCABQQF0IgYgBkEETRsiCEkEQCAIIAEiAmsiBiADKAIgIAFrSwRAIBQgASAGECogAygCKCECCyADKAIkIgogAkECdGohCSAGQQJPBEAgCUEAIAggAUF/c2pBAnQQhQEaIAogAiAIaiABa0ECdGpBBGshCSACIAZqQQFrIQILIAlBADYCACACQQFqIQggAygCLCECCyADIAg2AigLIAIgCEkNAiACIAhBsKPAABA+AAsgAiAFQeCiwAAQQAALQaCjwAAQewALIAMoAiQgAkECdGogBTYCACADIAMoAixBAWoiCDYCLCANIQEgEEEBaiIQIA9HDQALCyAHKAIwBEAgBygCNBAPCyAHKAIgBEAgBygCJBAPCyAHEA8gACADNgIACyAOQRBqJAAPCyACIAFB8KLAABA/AAsgDyACQZCjwAAQPwALQQhBwAAQggEAC0EEIAYQggEAC0EBIAUQggEACxBYAAsgBSACQfCiwAAQPwALIAEgAkGQo8AAED8AC/QGAQh/AkAgACgCACIKIAAoAggiA3IEQAJAIANFDQAgASACaiEIIABBDGooAgBBAWohByABIQUDQAJAIAUhAyAHQQFrIgdFDQAgAyAIRg0CAn8gAywAACIGQQBOBEAgBkH/AXEhBiADQQFqDAELIAMtAAFBP3EhCSAGQR9xIQUgBkFfTQRAIAVBBnQgCXIhBiADQQJqDAELIAMtAAJBP3EgCUEGdHIhCSAGQXBJBEAgCSAFQQx0ciEGIANBA2oMAQsgBUESdEGAgPAAcSADLQADQT9xIAlBBnRyciIGQYCAxABGDQMgA0EEagsiBSAEIANraiEEIAZBgIDEAEcNAQwCCwsgAyAIRg0AIAMsAAAiBUEATiAFQWBJciAFQXBJckUEQCAFQf8BcUESdEGAgPAAcSADLQADQT9xIAMtAAJBP3FBBnQgAy0AAUE/cUEMdHJyckGAgMQARg0BCwJAAkAgBEUNACACIARNBEBBACEDIAIgBEYNAQwCC0EAIQMgASAEaiwAAEFASA0BCyABIQMLIAQgAiADGyEC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IAtBAmosAABBv39KaiALQQNqLAAAQb9/SmohASAMIAdBBGoiB0cNAAsLIAlFDQAgAiAHaiEHA0AgASAHLAAAQb9/SmohASAHQQFqIQcgCUEBayIJDQALCyABIAZqIQYLAkACQCAAKAIARQRAQQEhASAAKAIUIgYgACgCGCIAIAogAiADEFENAQwCCyAGIAAoAgQiB08EQEEBIQEgACgCFCIGIAAoAhgiACAKIAIgAxBRDQEMAgsgCEEIcQRAIAAoAhAhCyAAQTA2AhAgAC0AICEMQQEhASAAQQE6ACAgACgCFCIIIAAoAhgiCSAKIAIgAxBRDQEgByAGa0EBaiEBAkADQCABQQFrIgFFDQEgCEEwIAkoAhARAABFDQALQQEPC0EBIQEgCCAEIAUgCSgCDBEBAA0BIAAgDDoAICAAIAs2AhBBACEBDAELIAcgBmshBgJAAkACQCAALQAgIgFBAWsOAwABAAILIAYhAUEAIQYMAQsgBkEBdiEBIAZBAWpBAXYhBgsgAUEBaiEBIABBGGooAgAhByAAKAIQIQggACgCFCEAAkADQCABQQFrIgFFDQEgACAIIAcoAhARAABFDQALQQEPC0EBIQEgACAHIAogAiADEFENACAAIAQgBSAHKAIMEQEADQBBACEBA0AgASAGRgRAQQAPCyABQQFqIQEgACAIIAcoAhARAABFDQALIAFBAWsgBkkPCyABDwsgBiAEIAUgACgCDBEBAAv8BQEFfyAAQQhrIgEgAEEEaygCACIDQXhxIgBqIQICQAJAAkACQCADQQFxDQAgA0EDcUUNASABKAIAIgMgAGohACABIANrIgFBuLHBACgCAEYEQCACKAIEQQNxQQNHDQFBsLHBACAANgIAIAIgAigCBEF+cTYCBCABIABBAXI2AgQgAiAANgIADwsgASADEBgLAkACQCACKAIEIgNBAnFFBEAgAkG8scEAKAIARg0CIAJBuLHBACgCAEYNBSACIANBeHEiAhAYIAEgACACaiIAQQFyNgIEIAAgAWogADYCACABQbixwQAoAgBHDQFBsLHBACAANgIADwsgAiADQX5xNgIEIAEgAEEBcjYCBCAAIAFqIAA2AgALIABBgAJJDQIgASAAECBBACEBQdCxwQBB0LHBACgCAEEBayIANgIAIAANAUGYr8EAKAIAIgAEQANAIAFBAWohASAAKAIIIgANAAsLQdCxwQBB/x8gASABQf8fTRs2AgAPC0G8scEAIAE2AgBBtLHBAEG0scEAKAIAIABqIgA2AgAgASAAQQFyNgIEQbixwQAoAgAgAUYEQEGwscEAQQA2AgBBuLHBAEEANgIACyAAQcixwQAoAgAiA00NAEG8scEAKAIAIgJFDQBBACEBAkBBtLHBACgCACIEQSlJDQBBkK/BACEAA0AgAiAAKAIAIgVPBEAgBSAAKAIEaiACSw0CCyAAKAIIIgANAAsLQZivwQAoAgAiAARAA0AgAUEBaiEBIAAoAggiAA0ACwtB0LHBAEH/HyABIAFB/x9NGzYCACADIARPDQBByLHBAEF/NgIACw8LIABBeHFBoK/BAGohAgJ/QaixwQAoAgAiA0EBIABBA3Z0IgBxRQRAQaixwQAgACADcjYCACACDAELIAIoAggLIQAgAiABNgIIIAAgATYCDCABIAI2AgwgASAANgIIDwtBuLHBACABNgIAQbCxwQBBsLHBACgCACAAaiIANgIAIAEgAEEBcjYCBCAAIAFqIAA2AgALlgUBC38jAEEwayIDJAAgA0EkaiABNgIAIANBAzoALCADQSA2AhwgA0EANgIoIAMgADYCICADQQA2AhQgA0EANgIMAn8CQAJAAkAgAigCECILRQRAIAJBDGooAgAiAEUNASACKAIIIgEgAEEDdGohBCAAQQFrQf////8BcUEBaiEIIAIoAgAhAANAIABBBGooAgAiBgRAIAMoAiAgACgCACAGIAMoAiQoAgwRAQANBAsgASgCACADQQxqIAFBBGooAgARAAANAyAFQQFqIQUgAEEIaiEAIAFBCGoiASAERw0ACwwBCyACQRRqKAIAIgBFDQAgAEEFdCEMIABBAWtB////P3FBAWohCCACKAIIIQYgAigCACEAA0AgAEEEaigCACIBBEAgAygCICAAKAIAIAEgAygCJCgCDBEBAA0DCyADIAUgC2oiAUEQaigCADYCHCADIAFBHGotAAA6ACwgAyABQRhqKAIANgIoIAFBDGooAgAhB0EAIQpBACEEAkACQAJAIAFBCGooAgBBAWsOAgACAQsgB0EDdCAGaiINKAIEQcUARw0BIA0oAgAoAgAhBwtBASEECyADIAc2AhAgAyAENgIMIAFBBGooAgAhBAJAAkACQCABKAIAQQFr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ACEHQQYhAQwBC0EAIQdBBSEBQQAhCwtB1a3BAC0AABogBSgCBCEIQZgDQQgQbiIORQ0DIA5BADYCiAIgDiAALwGSAyIMIAFBf3NqIg07AZIDIANBKGogACABQRhsaiIFQQhqKQMANwMAIANBMGogBUEQaikDADcDACADIAUpAwA3AyAgDUEMTw0EIAwgAUEBaiIMayANRw0NIABBjAJqIg8gAUEMbGoiBSkCBCEbIAUoAgAhBSAOQYwCaiAPIAxBDGxqIA1BDGwQhgEaIA4gACAMQRhsaiANQRhsEIYBIQ8gA0HsAGogA0EoaikDADcCACADQfQAaiADQTBqKQMANwIAIAAgATsBkgMgAyADKQMgNwJkIANByABqIANB6ABqKQMANwMAIANB0ABqIANB8ABqKQMANwMAIANB2ABqIANB+ABqKAIANgIAIAMgAykDYDcDQCAAIA8gBxsiDUGMAmogC0EMbGohAQJAIAsgDS8BkgMiDE8EQCABIAIpAgA3AgAgAUEIaiACQQhqKAIANgIADAELIAFBDGogASAMIAtrIgpBDGwQhwEgAUEIaiACQQhqKAIANgIAIAEgAikCADcCACANIAtBGGxqIgFBGGogASAKQRhsEIcBCyAIQQAgBxshFSANIAtBGGxqIgFBEGogBEEQaikDADcDACABIAQpAwA3AwAgA0EIaiICIANByABqKQMANwMAIANBEGoiByADQdAAaikDADcDACADQRhqIgogA0HYAGooAgA2AgAgAUEIaiAEQQhqKQMANwMAIA0gDEEBajsBkgMgAyADKQNANwMAIAVBgICAgHhHDQEgDSEACyATIAs2AgggEyAVNgIEIBMgADYCAAwBCyADQThqIAooAgA2AgAgA0EwaiAHKQMANwMAIANBKGogAikDADcDACADIAMpAwA3AyACQAJAIAAoAogCIgFFBEBBACEHDAELIANB4ABqQQRyIRYgA0EgakEEciERQQAhByAbIRogBSECA0AgByAIRw0GIAAvAZADIQACQAJAIAEiBC8BkgMiB0ELTwRAQQEhEiAAQQVPDQEgACEBQQQhAAwCCyAEQYwCaiIIIABBDGxqIQUgAEEBaiEBIAdBAWohDAJAIAAgB08EQCAFIBo3AgQgBSACNgIAIAQgAEEYbGoiAiARKQIANwIAIAJBEGogEUEQaikCADcC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ASAFRgRAIAIgAUEBEC0gAigCCCEBCyACKAIEIAFqQSw6AAAgAiABQQFqNgIIIANBGGshAyAEIAAQAyEBIARBGGohBCABRQ0BDAQLCyABIAVHDQELIAIgAUEBEC0gAigCCCEBCyACKAIEIAFqQd0AOgAAIAIgAUEBajYCCEEAIQELIAEL+gEBBH8jAEEwayIBJAAgACgCCCIDBEAgACgCBCEAA0ACQAJAAkACQCAALQAADgUDAwMBAgALAn8gAEEEaigCACICRQRAQQAhAkEADAELIAEgAjYCJCABQQA2AiAgASACNgIUIAFBADYCECABIABBCGooAgAiAjYCKCABIAI2AhggAEEMaigCACECQQELIQQgASACNgIsIAEgBDYCHCABIAQ2AgwgAUEMahAJDAILIABBBGooAgBFDQEgAEEIaigCABAPDAELIABBBGoiAhAmIAIoAgBFDQAgAEEIaigCABAPCyAAQRhqIQAgA0EBayIDDQALCyABQTBqJAAL+gEBBH8jAEEwayIBJAAgACgCCCIDBEAgACgCBCEAA0ACQAJAAkACQCAALQAADgUDAwMBAgALAn8gAEEEaigCACICRQRAQQAhAkEADAELIAEgAjYCJCABQQA2AiAgASACNgIUIAFBADYCECABIABBCGooAgAiAjYCKCABIAI2AhggAEEMaigCACECQQELIQQgASACNgIsIAEgBDYCHCABIAQ2AgwgAUEMahARDAILIABBBGooAgBFDQEgAEEIaigCABAPDAELIABBBGoiAhAnIAIoAgBFDQAgAEEIaigCABAPCyAAQRhqIQAgA0EBayIDDQALCyABQTBqJAALkwIBAX8jAEEQayICJAACfwJAAkACQAJAAkACQAJAIAAoAgAiAC0AAEEBaw4GAQIDBAUGAAsgAiAAQQRqNgIMIAFBpI/AAEEHIAJBDGpBrI/AABArDAYLIAIgAEEEajYCDCABQbyPwABBCyACQQxqQayPwAAQKwwFCyABQcePwABBEhBpDAQLIAIgAEEEajYCDCABQdmPwABBCyACQQxqQeSPwAAQKwwDCyACIABBAWo2AgwgAUH0j8AAQQkgAkEMakGAkMAAECsMAgsgAiAAQQFqNgIMIAFBkJDAAEEIIAJBDGpBmJDAABArDAELIAIgAEEBajYCDCABQaiQwABBCiACQQxqQbSQ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XwAAACEIAABAAAAAZmFsc2VcIlxcXGJcZlxuXHJcdDAwMDEwMjAzMDQwNTA2MDcwODA5MTAxMTEyMTMxNDE1MTYxNzE4MTkyMDIxMjIyMzI0MjUyNjI3MjgyOTMwMzEzMjMzMzQzNTM2MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5UG9zaXRpb25ieXRlABUAAAAIAAAACAAAABYAAABsaW5lcmVjb3JkAAAXAAAABAAAAAQAAAANAAAATm9uZVNvbWUXAAAABAAAAAQAAAAYAAAARW1wdHlJbnZhbGlkUGFyc2VGbG9hdEVycm9ya2luZAAXAAAABAAAAAQAAAAZAAAARGVzZXJpYWxpemVFcnJvcmZpZWxkAAAAFQAAABAAAAAIAAAAGgAAABcAAAAEAAAABAAAABsAAABNZXNzYWdlABcAAAAEAAAABAAAAA4AAABVbnN1cHBvcnRlZFVuZXhwZWN0ZWRFbmRPZlJvd0ludmFsaWRVdGY4FwAAAAQAAAAEAAAAHAAAAFBhcnNlQm9vbAAAABcAAAAEAAAABAAAAB0AAABQYXJzZUludBcAAAAEAAAABAAAAB4AAABQYXJzZUZsb2F0AAAXAAAABAAAAAQAAAAfAAAAMDEyMzQ1Njc4OWFiY2RlZnV1dXV1dXV1YnRudWZydXV1dXV1dXV1dXV1dXV1dXV1AAAiAEGwkcAACwFcAEHUksAAC40RIgAAAAwAAAAEAAAAIwAAACQAAAAlAAAAYSBEaXNwbGF5IGltcGxlbWVudGF0aW9uIHJldHVybmVkIGFuIGVycm9yIHVuZXhwZWN0ZWRseQAmAAAAAAAAAAEAAAAnAAAAL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvc3RyaW5nLnJzALQJEABLAAAAMwoAAA4AAABFcnJvckVPRiB3aGlsZSBwYXJzaW5nIGEgbGlzdEVPRiB3aGlsZSBwYXJzaW5nIGFuIG9iamVjdEVPRiB3aGlsZSBwYXJzaW5nIGEgc3RyaW5nRU9GIHdoaWxlIHBhcnNpbmcgYSB2YWx1ZWV4cGVjdGVkIGA6YGV4cGVjdGVkIGAsYCBvciBgXWBleHBlY3RlZCBgLGAgb3IgYH1gZXhwZWN0ZWQgaWRlbnRleHBlY3RlZCB2YWx1ZWV4cGVjdGVkIGAiYGludmFsaWQgZXNjYXBlaW52YWxpZCBudW1iZXJudW1iZXIgb3V0IG9mIHJhbmdlaW52YWxpZCB1bmljb2RlIGNvZGUgcG9pbnRjb250cm9sIGNoYXJhY3RlciAoXHUwMDAwLVx1MDAxRikgZm91bmQgd2hpbGUgcGFyc2luZyBhIHN0cmluZ2tleSBtdXN0IGJlIGEgc3RyaW5naW52YWxpZCB2YWx1ZTogZXhwZWN0ZWQga2V5IHRvIGJlIGEgbnVtYmVyIGluIHF1b3Rlc2Zsb2F0IGtleSBtdXN0IGJlIGZpbml0ZSAoZ290IE5hTiBvciArLy1pbmYpbG9uZSBsZWFkaW5nIHN1cnJvZ2F0ZSBpbiBoZXggZXNjYXBldHJhaWxpbmcgY29tbWF0cmFpbGluZyBjaGFyYWN0ZXJzdW5leHBlY3RlZCBlbmQgb2YgaGV4IGVzY2FwZXJlY3Vyc2lvbiBsaW1pdCBleGNlZWRlZEVycm9yKCwgbGluZTogLCBjb2x1bW46ICkAAEkMEAAGAAAATwwQAAgAAABXDBAACgAAAGEMEAABAAAAL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbWFwL2VudHJ5LnJzhAwQAGAAAABwAQAANgAAAGFzc2VydGlvbiBmYWlsZWQ6IGlkeCA8IENBUEFDSVRZL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbm9kZS5yc2Fzc2VydGlvbiBmYWlsZWQ6IGVkZ2UuaGVpZ2h0ID09IHNlbGYuaGVpZ2h0IC0gMQAUDRAAWwAAAK8CAAAJAAAAFA0QAFsAAACzAgAACQAAAGFzc2VydGlvbiBmYWlsZWQ6IHNyYy5sZW4oKSA9PSBkc3QubGVuKCkUDRAAWwAAAC8HAAAFAAAAFA0QAFsAAACvBAAAIwAAABQNEABbAAAA7wQAACQAAABhc3NlcnRpb24gZmFpbGVkOiBlZGdlLmhlaWdodCA9PSBzZWxmLm5vZGUuaGVpZ2h0IC0gMQAAABQNEABbAAAA8AMAAAkAAAAvcnVzdGMvYjExZmJmYmYzNTFiOTRjN2VlY2Y5ZTY3NDlhNDU0NGE2ZDQ3MTdmYS9saWJyYXJ5L2FsbG9jL3NyYy9jb2xsZWN0aW9ucy9idHJlZS9uYXZpZ2F0ZS5ycwBgDhAAXwAAAFkCAAAwAAAAL3J1c3RjL2IxMWZiZmJmMzUxYjk0YzdlZWNmOWU2NzQ5YTQ1NDRhNmQ0NzE3ZmEvbGlicmFyeS9hbGxvYy9zcmMvY29sbGVjdGlvbnMvYnRyZWUvbmF2aWdhdGUucnMA0A4QAF8AAADHAAAAJwAAAC9ob21lL3J1bm5lci8uY2FyZ28vcmVnaXN0cnkvc3JjL2luZGV4LmNyYXRlcy5pby02ZjE3ZDIyYmJhMTUwMDFmL3NlcmRlX2pzb24tMS4wLjExMy9zcmMvdmFsdWUvaW5kZXgucnNjYW5ub3QgYWNjZXNzIGtleSAgaW4gSlNPTiAAAKcPEAASAAAAuQ8QAAkAAABADxAAZwAAAGYAAAASAAAAbnVsbGJvb2xlYW5udW1iZXJzdHJpbmdhcnJheW9iamVjdAAAKgAAAAwAAAAEAAAAKwAAACwAAAAlAAAAL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvY3N2LTEuMy4wL3NyYy9ieXRlX3JlY29yZC5ycwAAIBAQAF4AAACPAQAAFgAAACAQEABeAAAA9AEAABcAAAAgEBAAXgAAABMCAAA6AAAAIBAQAF4AAAC1AgAAEwAAACAQEABeAAAAyQIAADYAAAAgEBAAXgAAANMCAAASAAAAIBAQAF4AAAA0AwAAFwAAACAQEABeAAAANwMAACIAAAAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tNmYxN2QyMmJiYTE1MDAxZi9jc3YtMS4zLjAvc3JjL2J5dGVfcmVjb3Jk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MzczODM5NDA0MTQyNDM0NDQ1NDY0NzQ4NDk1MDUxNTI1MzU0NTU1NjU3NTg1OTYwNjE2MjYzNjQ2NTY2Njc2ODY5NzA3MTcyNzM3NDc1NzY3Nzc4Nzk4MDgxODI4Mzg0ODU4Njg3ODg4OTkwOTE5MjkzOTQ5NTk2OTc5ODk5MC4wL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvY3N2LWNvcmUtMC4xLjExL3NyYy9yZWFkZXIucnMAAQcCAwQFBggJaW50ZXJuYWwgZXJyb3I6IGVudGVyZWQgdW5yZWFjaGFibGUgY29kZWs8EABfAAAANQMAABIAAABrPBAAXwAAAHkEAAA7AAAAazwQAF8AAACIBAAACgAAAGs8EABfAAAAjgQAAAkAAABpbnRlcm5hbCBlcnJvcjogZW50ZXJlZCB1bnJlYWNoYWJsZSBjb2RlL2hvbWUvcnVubmVyLy5jYXJnby9yZWdpc3RyeS9zcmMvaW5kZXguY3JhdGVzLmlvLTZmMTdkMjJiYmExNTAwMWYvY3N2LWNvcmUtMC4xLjExL3NyYy9saWIucnNkPRAAXAAAAIoAAAASAAAAZD0QAFwAAACSAAAAEgAAADEAAAAMAAAABAAAADIAAAAzAAAANAAAAOA9EAAAAAAAZW50aXR5IG5vdCBmb3VuZHBlcm1pc3Npb24gZGVuaWVkY29ubmVjdGlvbiByZWZ1c2VkY29ubmVjdGlvbiByZXNldGhvc3QgdW5yZWFjaGFibGVuZXR3b3JrIHVucmVhY2hhYmxlY29ubmVjdGlvbiBhYm9ydGVkbm90IGNvbm5lY3RlZGFkZHJlc3MgaW4gdXNlYWRkcmVzcyBub3QgYXZhaWxhYmxlbmV0d29yayBkb3duYnJva2VuIHBpcGVlbnRpdHkgYWxyZWFkeSBleGlzdHNvcGVyYXRpb24gd291bGQgYmxvY2tub3QgYSBkaXJlY3RvcnlpcyBhIGRpcmVjdG9yeWRpcmVjdG9yeSBub3QgZW1wdHlyZWFkLW9ubHkgZmlsZXN5c3RlbSBvciBzdG9yYWdlIG1lZGl1bWZpbGVzeXN0ZW0gbG9vcCBvciBpbmRpcmVjdGlvbiBsaW1pdCAoZS5nLiBzeW1saW5rIGxvb3Apc3RhbGUgbmV0d29yayBmaWxlIGhhbmRsZWludmFsaWQgaW5wdXQgcGFyYW1ldGVyaW52YWxpZCBkYXRhdGltZWQgb3V0d3JpdGUgemVyb25vIHN0b3JhZ2Ugc3BhY2VzZWVrIG9uIHVuc2Vla2FibGUgZmlsZWZpbGVzeXN0ZW0gcXVvdGEgZXhjZWVkZWRmaWxlIHRvbyBsYXJnZXJlc291cmNlIGJ1c3lleGVjdXRhYmxlIGZpbGUgYnVzeWRlYWRsb2NrY3Jvc3MtZGV2aWNlIGxpbmsgb3IgcmVuYW1ldG9vIG1hbnkgbGlua3NpbnZhbGlkIGZpbGVuYW1lYXJndW1lbnQgbGlzdCB0b28gbG9uZ29wZXJhdGlvbiBpbnRlcnJ1cHRlZHVuc3VwcG9ydGVkdW5leHBlY3RlZCBlbmQgb2YgZmlsZW91dCBvZiBtZW1vcnlvdGhlciBlcnJvcnVuY2F0ZWdvcml6ZWQgZXJyb3JPc2NvZGUANQAAAAQAAAAEAAAANgAAAGtpbmQ3AAAAAQAAAAEAAAA4AAAAbWVzc2FnZQAxAAAADAAAAAQAAAA5AAAAS2luZEVycm9yAAAANQAAAAgAAAAEAAAAOgAAAEN1c3RvbWVycm9yADUAAAAEAAAABAAAADsAAAAgKG9zIGVycm9yICngPRAAAAAAAGhBEAALAAAAc0EQAAEAAABtZW1vcnkgYWxsb2NhdGlvbiBvZiAgYnl0ZXMgZmFpbGVkAACMQRAAFQAAAKFBEAANAAAAbGlicmFyeS9zdGQvc3JjL2FsbG9jLnJzwEEQABgAAABiAQAACQAAAGxpYnJhcnkvc3RkL3NyYy9wYW5pY2tpbmcucnPoQRAAHAAAAIYCAAAeAAAAMQAAAAwAAAAEAAAAPAAAADUAAAAIAAAABAAAAD0AAAA1AAAACAAAAAQAAAA+AAAAPwAAAEAAAAAQAAAABAAAAEEAAABCAAAAQwAAAAAAAAABAAAARAAAAE5vdEZvdW5kUGVybWlzc2lvbkRlbmllZENvbm5lY3Rpb25SZWZ1c2VkQ29ubmVjdGlvblJlc2V0SG9zdFVucmVhY2hhYmxlTmV0d29ya1VucmVhY2hhYmxlQ29ubmVjdGlvbkFib3J0ZWROb3RDb25uZWN0ZWRBZGRySW5Vc2VBZGRyTm90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")},A.parse=K,A.parseBinary=k,A.parseResponse=S,A.parseString=F,A.parseStringStream=U,A.parseStringToArraySyncWASM=function(A,I={}){const{delimiter:B=E,quotation:Q=i}=I;if("string"!=typeof B||1!==B.length)throw new Error("Invalid delimiter, must be a single character on WASM.");if(Q!==i)throw new Error("Invalid quotation, must be double quote on WASM.");const g=B.charCodeAt(0);return JSON.parse(W(A,g))},A.parseUint8ArrayStream=L,Object.defineProperty(A,Symbol.toStringTag,{value:"Module"})}));
2
2
  //# sourceMappingURL=web-csv-toolbox.umd.cjs.map
@@ -1 +1 @@
1
- {"version":3,"file":"web-csv-toolbox.umd.cjs","sources":["../src/common/constants.ts","../src/constants.ts","../src/utils/escapeRegExp.ts","../src/Lexer.ts","../src/assertCommonOptions.ts","../src/LexerTransformer.ts","../src/RecordAssembler.ts","../src/RecordAssemblerTransformer.ts","../src/parseStringToArraySync.ts","../src/parseStringToIterableIterator.ts","../src/parseStringToStream.ts","../src/utils/convertThisAsyncIterableIteratorToArray.ts","../src/parseString.ts","../src/convertBinaryToString.ts","../src/parseBinaryToIterableIterator.ts","../src/parseBinary.ts","../src/utils/convertIterableIteratorToAsync.ts","../src/utils/pipeline.ts","../src/parseUint8ArrayStreamToStream.ts","../src/utils/convertStreamToAsyncIterableIterator.ts","../src/parseUint8ArrayStream.ts","../src/parseStringStreamToStream.ts","../src/parseStringStream.ts","../src/getOptionsFromResponse.ts","../src/utils/parseMime.ts","../src/parseResponse.ts","../src/parse.ts","../src/parseBinaryToArraySync.ts","../src/parseBinaryToStream.ts","../src/parseResponseToStream.ts","../src/loadWASM.ts","../src/parseStringToArraySyncWASM.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","export const CR = \"\\r\";\nexport const CRLF = \"\\r\\n\";\nexport const LF = \"\\n\";\n\n/**\n * COMMA is a symbol for comma(,).\n */\nexport const COMMA = \",\";\n\n/**\n * DOUBLE_QUOTE is a symbol for double quote(\").\n */\nexport const DOUBLE_QUOTE = '\"';\n","/**\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","import { assertCommonOptions } from \"./assertCommonOptions.ts\";\nimport { Field, FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { CommonOptions, Token } from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\nexport class Lexer {\n #delimiter: string;\n #delimiterLength: number;\n #quotation: string;\n #quotationLength: number;\n #matcher: RegExp;\n #buffer = \"\";\n #flush = false;\n\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#delimiterLength = delimiter.length;\n this.#quotation = quotation;\n this.#quotationLength = quotation.length;\n\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 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 public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\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, -CRLF.length);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -LF.length);\n }\n }\n let currentField: Token | null = null;\n for (let token: Token | null; (token = this.#nextToken()); ) {\n switch (token) {\n case FieldDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n case RecordDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n default:\n currentField = token;\n break;\n }\n }\n if (currentField) {\n yield currentField;\n }\n }\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 return RecordDelimiter;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n return RecordDelimiter;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(this.#delimiterLength);\n return FieldDelimiter;\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n // If not flushing and the buffer doesn't end with a quote, then return null.\n if (this.#flush === false && this.#buffer.endsWith(this.#quotation)) {\n return null;\n }\n return this.#extractQuotedString();\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 this.#buffer = this.#buffer.slice(match[0].length);\n return { type: Field, value: match[0] };\n }\n\n // Otherwise, return null\n return null;\n }\n\n #extractQuotedString(): Token | null {\n let end = this.#quotationLength; // Skip the opening quote\n let value = \"\";\n\n while (end < this.#buffer.length) {\n // Escaped quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) ===\n this.#quotation &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength * 2,\n ) === this.#quotation\n ) {\n value += this.#quotation;\n end += this.#quotationLength * 2;\n continue;\n }\n\n // Closing quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) === this.#quotation\n ) {\n // If flushing and the buffer doesn't end with a quote, then return null\n if (\n this.#flush === false &&\n end + this.#quotationLength < this.#buffer.length &&\n this.#buffer.slice(\n end + this.#quotationLength,\n this.#delimiterLength,\n ) !== this.#delimiter &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 2 /** CRLF.length */,\n ) !== CRLF &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 1 /** LF.length */,\n ) !== LF\n ) {\n return null;\n }\n\n // Otherwise, return the quoted string\n this.#buffer = this.#buffer.slice(end + this.#quotationLength);\n return { type: Field, value };\n }\n\n value += this.#buffer[end];\n end++;\n }\n\n // If we get here, we've reached the end of the buffer\n return null;\n }\n}\n","import { CommonOptions } from \"./common/types.ts\";\nimport { CR, LF } from \"./constants.ts\";\n\n/**\n * Assert that the options are valid.\n *\n * @param options The options to assert.\n */\nexport function assertCommonOptions(options: Required<CommonOptions>): void {\n if (typeof options.quotation === \"string\" && options.quotation.length === 0) {\n throw new Error(\"quotation must not be empty\");\n }\n if (typeof options.delimiter === \"string\" && options.delimiter.length === 0) {\n throw new Error(\"delimiter must not be empty\");\n }\n if (options.quotation.includes(LF) || options.quotation.includes(CR)) {\n throw new Error(\"quotation must not include CR or LF\");\n }\n if (options.delimiter.includes(LF) || options.delimiter.includes(CR)) {\n throw new Error(\"delimiter must not include CR or LF\");\n }\n if (\n options.delimiter.includes(options.quotation) ||\n options.quotation.includes(options.delimiter)\n ) {\n throw new Error(\n \"delimiter and quotation must not include each other as a substring\",\n );\n }\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { 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\" }\n * // FieldDelimiter\n * // { type: Field, value: \"age\" }\n * // RecordDelimiter\n * // { type: Field, value: \"Alice\" }\n * // FieldDelimiter\n * // { type: Field, value: \"20\" }\n * // RecordDelimiter\n * ```\n */\nexport class LexerTransformer extends TransformStream<string, Token[]> {\n constructor(options: CommonOptions = {}) {\n const lexer = new Lexer(options);\n super({\n transform: (chunk, controller) => {\n if (chunk.length !== 0) {\n controller.enqueue([...lexer.lex(chunk, true)]);\n }\n },\n flush: (controller) => {\n controller.enqueue(lexer.flush());\n },\n });\n }\n}\n","import { FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { CSVRecord, RecordAssemblerOptions, Token } 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) {\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 Error(\"The header must not be empty.\");\n }\n if (new Set(this.#header).size !== this.#header.length) {\n throw new Error(\"The header must not contain duplicate fields.\");\n }\n }\n}\n","import { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, RecordAssemblerOptions, Token } 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 constructor(options: RecordAssemblerOptions<Header> = {}) {\n const assembler = new RecordAssembler(options);\n super({\n transform: (tokens, controller) => {\n for (const token of assembler.assemble(tokens, false)) {\n controller.enqueue(token);\n }\n },\n flush: (controller) => {\n for (const token of assembler.flush()) {\n controller.enqueue(token);\n }\n },\n });\n }\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, ParseOptions } from \"./common/types.ts\";\n\nexport function parseStringToArraySync<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): CSVRecord<Header>[] {\n const lexer = new Lexer(options);\n const assembler = new RecordAssembler(options);\n const tokens = lexer.lex(csv);\n return [...assembler.assemble(tokens)];\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, ParseOptions } from \"./common/types.ts\";\n\nexport function parseStringToIterableIterator<\n Header extends ReadonlyArray<string>,\n>(\n csv: string,\n options?: ParseOptions<Header>,\n): IterableIterator<CSVRecord<Header>> {\n const lexer = new Lexer(options);\n const assembler = new RecordAssembler(options);\n const tokens = lexer.lex(csv);\n return assembler.assemble(tokens);\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, ParseOptions } from \"./common/types.ts\";\n\nexport function parseStringToStream<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\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}\n","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","import { CSVRecord, ParseOptions } from \"./common/types.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 yield* parseStringToIterableIterator(csv, options);\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","import { ParseBinaryOptions } from \"./common/types.ts\";\n\nexport function convertBinaryToString<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header>,\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","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { convertBinaryToString } from \"./convertBinaryToString.ts\";\nimport { parseStringToIterableIterator } from \"./parseStringToIterableIterator.ts\";\n\nexport function parseBinaryToIterableIterator<\n Header extends ReadonlyArray<string>,\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): IterableIterator<CSVRecord<Header>> {\n const csv = convertBinaryToString(binary, options);\n return parseStringToIterableIterator(csv, options);\n}\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseBinaryToArraySync } from \"./parseBinaryToArraySync.ts\";\nimport { parseBinaryToIterableIterator } from \"./parseBinaryToIterableIterator.ts\";\nimport { parseBinaryToStream } from \"./parseBinaryToStream.ts\";\nimport { convertIterableIteratorToAsync } from \"./utils/convertIterableIteratorToAsync.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse a binary from an {@link !Uint8Array}.\n *\n * @category Middle-level API\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n *\n * @example Parsing CSV binary\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for await (const record of parseUint8Array(csv)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseBinary<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const iterator = parseBinaryToIterableIterator(bytes, options);\n return convertIterableIteratorToAsync(iterator);\n}\n\nexport declare namespace parseBinary {\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n *\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = await parseUint8Array.toArray(csv);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = parseUint8Array.toArraySync(csv);\n * ```\n */\n export function toArraySync<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): CSVRecord<Header>[];\n\n /**\n * Parse a binary from an {@link !Uint8Array} to an iterable iterator of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for (const record of parseUint8Array.toIterableIterator(csv)) {\n * console.log(record);\n * }\n * ```\n */\n export function toIterableIterator<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): IterableIterator<CSVRecord<Header>>;\n\n /**\n * Parse a binary from an {@link !Uint8Array} to a stream of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Stream of records.\n *\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const stream = parseUint8Array.toStream(csv);\n *\n * await stream.pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseBinary, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toArraySync: {\n enumerable: true,\n writable: false,\n value: parseBinaryToArraySync,\n },\n toIterableIterator: {\n enumerable: true,\n writable: false,\n value: parseBinaryToIterableIterator,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseBinaryToStream,\n },\n});\n","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","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 },\n });\n}\n","import { LexerTransformer } from \"./LexerTransformer.ts\";\nimport { RecordAssemblerTransformer } from \"./RecordAssemblerTransformer.ts\";\nimport { 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","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","import { 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","import { LexerTransformer } from \"./LexerTransformer.ts\";\nimport { RecordAssemblerTransformer } from \"./RecordAssemblerTransformer.ts\";\nimport { 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","import { 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","import { ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseMime } from \"./utils/parseMime.ts\";\n\nexport function getOptionsFromResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options: ParseBinaryOptions<Header> = {},\n): ParseBinaryOptions<Header> {\n const { headers } = response;\n const contentType = headers.get(\"content-type\") ?? \"text/csv\";\n const mime = parseMime(contentType);\n if (mime.type !== \"text/csv\") {\n throw new Error(`Invalid mime type: ${contentType}`);\n }\n const decomposition =\n (headers.get(\"content-encoding\") as CompressionFormat) ?? undefined;\n const charset = mime.parameters.charset ?? \"utf-8\";\n // TODO: Support header=present and header=absent\n // const header = mime.parameters.header ?? \"present\";\n return {\n decomposition,\n charset,\n ...options,\n };\n}\n","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","import { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new Error(\"Response body is null\");\n }\n return parseUint8ArrayStream(response.body, options_);\n}\n\nexport declare namespace parseResponse {\n /**\n * Parse CSV Response to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parseResponse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Response to stream of records.\n *\n * @param response Response to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * await parseResponse.toStream(response)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parseResponse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStreamSync: {\n enumerable: true,\n writable: false,\n value: parseResponseToStream,\n },\n});\n","import {\n CSV,\n CSVBinary,\n CSVRecord,\n CSVString,\n ParseBinaryOptions,\n ParseOptions,\n} from \"./common/types.ts\";\nimport { parseBinary } from \"./parseBinary.ts\";\nimport { parseResponse } from \"./parseResponse.ts\";\nimport { parseString } from \"./parseString.ts\";\nimport { parseStringStream } from \"./parseStringStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse CSV to records.\n *\n * {@link !String}, {@link !ReadableStream}<string | {@link !Uint8Array}> and {@link !Response} are supported.\n *\n *\n * @typeParam Header Header type like `['name', 'age']`.\n *\n * @param csv CSV string to parse.\n * @param options Parsing options for CSV string parsing.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parse.toArray} function.\n * @category High-level API\n *\n * @remarks\n * {@link parseString}, {@link parseBinary}, {@link parseUint8ArrayStream},\n * {@link parseStringStream} and {@link parseResponse} are used internally.\n *\n * If you known the type of the CSV, it performs better to use them directly.\n *\n * | If you want to parse a... | Use... | Options... |\n * | -------------------------------------------- | ----------------------------- | -------------------------- |\n * | {@link !String} | {@link parseString} | {@link ParseOptions} |\n * | {@link !ReadableStream}<{@link !String}> | {@link parseStringStream} | {@link ParseOptions} |\n * | {@link !Uint8Array} \\| {@link !ArrayBuffer} | {@link parseBinary} | {@link ParseBinaryOptions} |\n * | {@link !ReadableStream}<{@link !Uint8Array}> | {@link parseUint8ArrayStream} | {@link ParseBinaryOptions} |\n * | {@link !Response} | {@link parseResponse} | {@link ParseBinaryOptions} |\n *\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files from streams\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * }\n * });\n *\n * for await (const record of parse(stream)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n *\n * @example Parsing CSV files with headers\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV has no header.\n * const csv = `Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv, { header: ['name', 'age'] })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files with different delimiters characters\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name\\tage\n * Alice\\t42\n * Bob\\t69`;\n *\n * for await (const record of parse(csv, { delimiter: '\\t' })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport function parse<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\n/**\n * Parse CSV binary to records.\n *\n * @param csv CSV binary to parse.\n * @param options Parsing options for CSV binary parsing.\n *\n * @example Parsing CSV files from responses\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is not gzipped and encoded in utf-8.\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parse(response)) {\n * // ...\n * }\n * ```\n *\n * @example Parsing CSV files with options spcialized for binary\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is gzipped and encoded in shift-jis and has BOM.\n * const response = await fetch('https://example.com/data.csv.gz');\n *\n * for await (const record of parse(response, {\n * charset: 'shift-jis',\n * ignoreBOM: true,\n * decomposition: 'gzip',\n * })) {\n * // ...\n * }\n * ```\n */\nexport function parse<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport async function* parse<Header extends ReadonlyArray<string>>(\n csv: CSV,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n if (typeof csv === \"string\") {\n yield* parseString(csv, options);\n } else if (csv instanceof Uint8Array || csv instanceof ArrayBuffer) {\n yield* parseBinary(csv, options);\n } else if (csv instanceof ReadableStream) {\n const [branch1, branch2] = csv.tee();\n const reader1 = branch1.getReader();\n const { value: firstChunk } = await reader1.read();\n reader1.releaseLock();\n if (typeof firstChunk === \"string\") {\n yield* parseStringStream(branch2 as ReadableStream<string>, options);\n } else if (firstChunk instanceof Uint8Array) {\n yield* parseUint8ArrayStream(\n branch2 as ReadableStream<Uint8Array>,\n options,\n );\n }\n } else if (csv instanceof Response) {\n yield* parseResponse(csv, options);\n }\n}\n\nexport declare namespace parse {\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = await parse.toArray(csv);\n * console.log(records);\n * // Prints:\n * // [ { name: 'Alice', age: '42' }, { name: 'Bob', age: '69' } ]\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n});\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { convertBinaryToString } from \"./convertBinaryToString.ts\";\nimport { parseStringToArraySync } from \"./parseStringToArraySync.ts\";\n\nexport function parseBinaryToArraySync<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): CSVRecord<Header>[] {\n const csv = convertBinaryToString(binary, options);\n return parseStringToArraySync(csv, options);\n}\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { convertBinaryToString } from \"./convertBinaryToString.ts\";\nimport { parseStringToStream } from \"./parseStringToStream.ts\";\n\nexport function parseBinaryToStream<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): ReadableStream<CSVRecord<Header>> {\n const csv = convertBinaryToString(binary, options);\n return parseStringToStream(csv, options);\n}\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.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 const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new Error(\"Response body is null\");\n }\n return parseUint8ArrayStreamToStream(response.body, options_);\n}\n","import init, { InitInput } from \"web-csv-toolbox-wasm\";\n\nimport dataURL from \"web-csv-toolbox-wasm/web_csv_toolbox_wasm_bg.wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input ?? dataURL);\n}\n","import { parseStringToArraySync } from \"web-csv-toolbox-wasm\";\nimport { 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 Error(\"Invalid delimiter, must be a single character on WASM.\");\n }\n if (quotation !== DOUBLE_QUOTE) {\n throw new Error(\"Invalid quotation, must be double quote on WASM.\");\n }\n const demiliterCode = delimiter.charCodeAt(0);\n return JSON.parse(parseStringToArraySync(csv, demiliterCode));\n}\n"],"names":["FieldDelimiter","Symbol","for","RecordDelimiter","Field","CRLF","LF","COMMA","DOUBLE_QUOTE","escapeRegExp","v","replace","Lexer","delimiter","delimiterLength","quotation","quotationLength","matcher","buffer","flush","constructor","options","length","Error","includes","assertCommonOptions","this","d","q","RegExp","lex","chunk","buffering","tokens","endsWith","slice","currentField","token","nextToken","startsWith","extractQuotedString","match","exec","type","value","end","LexerTransformer","TransformStream","lexer","super","transform","controller","enqueue","RecordAssembler","fieldIndex","row","header","dirty","Array","isArray","setHeader","assemble","Object","fromEntries","map","index","at","fill","filter","Set","size","RecordAssemblerTransformer","assembler","parseStringToArraySync","csv","parseStringToIterableIterator","parseStringToStream","ReadableStream","start","record","close","async","convertThisAsyncIterableIteratorToArray","args","rows","push","parseString","convertBinaryToString","binary","TextDecoder","charset","ignoreBOM","fatal","decode","ArrayBuffer","Uint8Array","parseBinaryToIterableIterator","parseBinary","bytes","iterator","next","result","Promise","resolve","asyncIterator","convertIterableIteratorToAsync","pipeline","stream","transformers","reduce","transformer","pipeThrough","pipeTo","WritableStream","write","parseUint8ArrayStreamToStream","decomposition","DecompressionStream","TextDecoderStream","convertStreamToAsyncIterableIterator","reader","getReader","done","read","parseUint8ArrayStream","parseStringStreamToStream","parseStringStream","getOptionsFromResponse","response","headers","contentType","get","mime","parameters","split","trim","paramator","key","parseMime","parseResponse","options_","body","parse","branch1","branch2","tee","reader1","firstChunk","releaseLock","Response","defineProperties","toArray","enumerable","writable","internal.convertThisAsyncIterableIteratorToArray","toArraySync","toIterableIterator","toStream","toStreamSync","input","init","demiliterCode","charCodeAt","JSON"],"mappings":"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"}
1
+ {"version":3,"file":"web-csv-toolbox.umd.cjs","sources":["../src/common/constants.ts","../src/constants.ts","../src/utils/escapeRegExp.ts","../src/Lexer.ts","../src/assertCommonOptions.ts","../src/LexerTransformer.ts","../src/RecordAssembler.ts","../src/RecordAssemblerTransformer.ts","../src/parseStringToArraySync.ts","../src/parseStringToIterableIterator.ts","../src/parseStringToStream.ts","../src/utils/convertThisAsyncIterableIteratorToArray.ts","../src/parseString.ts","../src/convertBinaryToString.ts","../src/parseBinaryToIterableIterator.ts","../src/parseBinary.ts","../src/utils/convertIterableIteratorToAsync.ts","../src/utils/pipeline.ts","../src/parseUint8ArrayStreamToStream.ts","../src/utils/convertStreamToAsyncIterableIterator.ts","../src/parseUint8ArrayStream.ts","../src/parseStringStreamToStream.ts","../src/parseStringStream.ts","../src/getOptionsFromResponse.ts","../src/utils/parseMime.ts","../src/parseResponse.ts","../src/parse.ts","../src/parseBinaryToArraySync.ts","../src/parseBinaryToStream.ts","../src/parseResponseToStream.ts","../src/loadWASM.ts","../src/parseStringToArraySyncWASM.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","export const CR = \"\\r\";\nexport const CRLF = \"\\r\\n\";\nexport const LF = \"\\n\";\n\n/**\n * COMMA is a symbol for comma(,).\n */\nexport const COMMA = \",\";\n\n/**\n * DOUBLE_QUOTE is a symbol for double quote(\").\n */\nexport const DOUBLE_QUOTE = '\"';\n","/**\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","import { assertCommonOptions } from \"./assertCommonOptions.ts\";\nimport { Field, FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { CommonOptions, Token } from \"./common/types.ts\";\nimport { COMMA, CRLF, DOUBLE_QUOTE, LF } from \"./constants.ts\";\nimport { escapeRegExp } from \"./utils/escapeRegExp.ts\";\n\nexport class Lexer {\n #delimiter: string;\n #delimiterLength: number;\n #quotation: string;\n #quotationLength: number;\n #matcher: RegExp;\n #buffer = \"\";\n #flush = false;\n\n constructor({\n delimiter = COMMA,\n quotation = DOUBLE_QUOTE,\n }: CommonOptions = {}) {\n assertCommonOptions({ delimiter, quotation });\n this.#delimiter = delimiter;\n this.#delimiterLength = delimiter.length;\n this.#quotation = quotation;\n this.#quotationLength = quotation.length;\n\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 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 public flush(): Token[] {\n this.#flush = true;\n return [...this.#tokens()];\n }\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, -CRLF.length);\n } else if (this.#buffer.endsWith(LF)) {\n this.#buffer = this.#buffer.slice(0, -LF.length);\n }\n }\n let currentField: Token | null = null;\n for (let token: Token | null; (token = this.#nextToken()); ) {\n switch (token) {\n case FieldDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n case RecordDelimiter:\n if (currentField) {\n yield currentField;\n currentField = null;\n }\n yield token;\n break;\n default:\n // If currentField is not null, append the new token's value to it\n if (currentField) {\n currentField.value += token.value;\n } else {\n currentField = token;\n }\n break;\n }\n }\n if (currentField) {\n yield currentField;\n }\n }\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 return RecordDelimiter;\n }\n\n // Check for LF\n if (this.#buffer.startsWith(LF)) {\n this.#buffer = this.#buffer.slice(1);\n return RecordDelimiter;\n }\n\n // Check for Delimiter\n if (this.#buffer.startsWith(this.#delimiter)) {\n this.#buffer = this.#buffer.slice(this.#delimiterLength);\n return FieldDelimiter;\n }\n\n // Check for Quoted String\n if (this.#buffer.startsWith(this.#quotation)) {\n // If not flushing and the buffer doesn't end with a quote, then return null.\n if (this.#flush === false && this.#buffer.endsWith(this.#quotation)) {\n return null;\n }\n return this.#extractQuotedString();\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 this.#buffer = this.#buffer.slice(match[0].length);\n return { type: Field, value: match[0] };\n }\n\n // Otherwise, return null\n return null;\n }\n\n #extractQuotedString(): Token | null {\n let end = this.#quotationLength; // Skip the opening quote\n let value = \"\";\n\n while (end < this.#buffer.length) {\n // Escaped quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) ===\n this.#quotation &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength * 2,\n ) === this.#quotation\n ) {\n value += this.#quotation;\n end += this.#quotationLength * 2;\n continue;\n }\n\n // Closing quote\n if (\n this.#buffer.slice(end, end + this.#quotationLength) === this.#quotation\n ) {\n // If flushing and the buffer doesn't end with a quote, then return null\n if (\n this.#flush === false &&\n end + this.#quotationLength < this.#buffer.length &&\n this.#buffer.slice(\n end + this.#quotationLength,\n this.#delimiterLength,\n ) !== this.#delimiter &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 2 /** CRLF.length */,\n ) !== CRLF &&\n this.#buffer.slice(\n end + this.#quotationLength,\n end + this.#quotationLength + 1 /** LF.length */,\n ) !== LF\n ) {\n return null;\n }\n\n // Otherwise, return the quoted string\n this.#buffer = this.#buffer.slice(end + this.#quotationLength);\n return { type: Field, value };\n }\n\n value += this.#buffer[end];\n end++;\n }\n\n // If we get here, we've reached the end of the buffer\n return null;\n }\n}\n","import { CommonOptions } from \"./common/types.ts\";\nimport { CR, LF } from \"./constants.ts\";\n\n/**\n * Assert that the options are valid.\n *\n * @param options The options to assert.\n */\nexport function assertCommonOptions(options: Required<CommonOptions>): void {\n if (typeof options.quotation === \"string\" && options.quotation.length === 0) {\n throw new Error(\"quotation must not be empty\");\n }\n if (typeof options.delimiter === \"string\" && options.delimiter.length === 0) {\n throw new Error(\"delimiter must not be empty\");\n }\n if (options.quotation.includes(LF) || options.quotation.includes(CR)) {\n throw new Error(\"quotation must not include CR or LF\");\n }\n if (options.delimiter.includes(LF) || options.delimiter.includes(CR)) {\n throw new Error(\"delimiter must not include CR or LF\");\n }\n if (\n options.delimiter.includes(options.quotation) ||\n options.quotation.includes(options.delimiter)\n ) {\n throw new Error(\n \"delimiter and quotation must not include each other as a substring\",\n );\n }\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { 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\" }\n * // FieldDelimiter\n * // { type: Field, value: \"age\" }\n * // RecordDelimiter\n * // { type: Field, value: \"Alice\" }\n * // FieldDelimiter\n * // { type: Field, value: \"20\" }\n * // RecordDelimiter\n * ```\n */\nexport class LexerTransformer extends TransformStream<string, Token[]> {\n constructor(options: CommonOptions = {}) {\n const lexer = new Lexer(options);\n super({\n transform: (chunk, controller) => {\n if (chunk.length !== 0) {\n controller.enqueue([...lexer.lex(chunk, true)]);\n }\n },\n flush: (controller) => {\n controller.enqueue(lexer.flush());\n },\n });\n }\n}\n","import { FieldDelimiter, RecordDelimiter } from \"./common/constants.ts\";\nimport { CSVRecord, RecordAssemblerOptions, Token } 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) {\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 Error(\"The header must not be empty.\");\n }\n if (new Set(this.#header).size !== this.#header.length) {\n throw new Error(\"The header must not contain duplicate fields.\");\n }\n }\n}\n","import { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, RecordAssemblerOptions, Token } 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 constructor(options: RecordAssemblerOptions<Header> = {}) {\n const assembler = new RecordAssembler(options);\n super({\n transform: (tokens, controller) => {\n for (const token of assembler.assemble(tokens, false)) {\n controller.enqueue(token);\n }\n },\n flush: (controller) => {\n for (const token of assembler.flush()) {\n controller.enqueue(token);\n }\n },\n });\n }\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, ParseOptions } from \"./common/types.ts\";\n\nexport function parseStringToArraySync<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): CSVRecord<Header>[] {\n const lexer = new Lexer(options);\n const assembler = new RecordAssembler(options);\n const tokens = lexer.lex(csv);\n return [...assembler.assemble(tokens)];\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, ParseOptions } from \"./common/types.ts\";\n\nexport function parseStringToIterableIterator<\n Header extends ReadonlyArray<string>,\n>(\n csv: string,\n options?: ParseOptions<Header>,\n): IterableIterator<CSVRecord<Header>> {\n const lexer = new Lexer(options);\n const assembler = new RecordAssembler(options);\n const tokens = lexer.lex(csv);\n return assembler.assemble(tokens);\n}\n","import { Lexer } from \"./Lexer.ts\";\nimport { RecordAssembler } from \"./RecordAssembler.ts\";\nimport { CSVRecord, ParseOptions } from \"./common/types.ts\";\n\nexport function parseStringToStream<Header extends ReadonlyArray<string>>(\n csv: string,\n options?: ParseOptions<Header>,\n): ReadableStream<CSVRecord<Header>> {\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}\n","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","import { CSVRecord, ParseOptions } from \"./common/types.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 yield* parseStringToIterableIterator(csv, options);\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","import { ParseBinaryOptions } from \"./common/types.ts\";\n\nexport function convertBinaryToString<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header>,\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","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { convertBinaryToString } from \"./convertBinaryToString.ts\";\nimport { parseStringToIterableIterator } from \"./parseStringToIterableIterator.ts\";\n\nexport function parseBinaryToIterableIterator<\n Header extends ReadonlyArray<string>,\n>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): IterableIterator<CSVRecord<Header>> {\n const csv = convertBinaryToString(binary, options);\n return parseStringToIterableIterator(csv, options);\n}\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseBinaryToArraySync } from \"./parseBinaryToArraySync.ts\";\nimport { parseBinaryToIterableIterator } from \"./parseBinaryToIterableIterator.ts\";\nimport { parseBinaryToStream } from \"./parseBinaryToStream.ts\";\nimport { convertIterableIteratorToAsync } from \"./utils/convertIterableIteratorToAsync.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse a binary from an {@link !Uint8Array}.\n *\n * @category Middle-level API\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n *\n * @example Parsing CSV binary\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for await (const record of parseUint8Array(csv)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseBinary<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const iterator = parseBinaryToIterableIterator(bytes, options);\n return convertIterableIteratorToAsync(iterator);\n}\n\nexport declare namespace parseBinary {\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n *\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = await parseUint8Array.toArray(csv);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse a binary from an {@link !Uint8Array} to an array of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Array of records\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const records = parseUint8Array.toArraySync(csv);\n * ```\n */\n export function toArraySync<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array | ArrayBuffer,\n options?: ParseBinaryOptions<Header>,\n ): CSVRecord<Header>[];\n\n /**\n * Parse a binary from an {@link !Uint8Array} to an iterable iterator of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Async iterable iterator of records.\n * @example\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * for (const record of parseUint8Array.toIterableIterator(csv)) {\n * console.log(record);\n * }\n * ```\n */\n export function toIterableIterator<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): IterableIterator<CSVRecord<Header>>;\n\n /**\n * Parse a binary from an {@link !Uint8Array} to a stream of records.\n *\n * @param bytes CSV bytes to parse.\n * @param options Parsing options\n * @returns Stream of records.\n *\n * @example\n *\n * ```ts\n * import { parseUint8Array } from 'web-csv-toolbox';\n *\n * const csv = Uint8Array.from([\n * // ...\n * ]);\n *\n * const stream = parseUint8Array.toStream(csv);\n *\n * await stream.pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n bytes: Uint8Array,\n options?: ParseBinaryOptions<Header>,\n ): ReadableStream<CSVRecord<Header>>;\n}\n\nObject.defineProperties(parseBinary, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toArraySync: {\n enumerable: true,\n writable: false,\n value: parseBinaryToArraySync,\n },\n toIterableIterator: {\n enumerable: true,\n writable: false,\n value: parseBinaryToIterableIterator,\n },\n toStream: {\n enumerable: true,\n writable: false,\n value: parseBinaryToStream,\n },\n});\n","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","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 },\n });\n}\n","import { LexerTransformer } from \"./LexerTransformer.ts\";\nimport { RecordAssemblerTransformer } from \"./RecordAssemblerTransformer.ts\";\nimport { 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","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","import { 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","import { LexerTransformer } from \"./LexerTransformer.ts\";\nimport { RecordAssemblerTransformer } from \"./RecordAssemblerTransformer.ts\";\nimport { 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","import { 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","import { ParseBinaryOptions } from \"./common/types.ts\";\nimport { parseMime } from \"./utils/parseMime.ts\";\n\nexport function getOptionsFromResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options: ParseBinaryOptions<Header> = {},\n): ParseBinaryOptions<Header> {\n const { headers } = response;\n const contentType = headers.get(\"content-type\") ?? \"text/csv\";\n const mime = parseMime(contentType);\n if (mime.type !== \"text/csv\") {\n throw new Error(`Invalid mime type: ${contentType}`);\n }\n const decomposition =\n (headers.get(\"content-encoding\") as CompressionFormat) ?? undefined;\n const charset = mime.parameters.charset ?? \"utf-8\";\n // TODO: Support header=present and header=absent\n // const header = mime.parameters.header ?? \"present\";\n return {\n decomposition,\n charset,\n ...options,\n };\n}\n","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","import { CSVRecord, ParseOptions } from \"./common/types.ts\";\nimport { getOptionsFromResponse } from \"./getOptionsFromResponse.ts\";\nimport { parseResponseToStream } from \"./parseResponseToStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse HTTP Response what contains CSV to records,\n * ideal for smaller data sets.\n *\n * @remarks\n * This function automatically treats response headers.\n *\n * - If `Content-Type` header is not set, it assumes `text/csv`.\n * - If `Content-Type` header is not `text/csv`, it throws an error.\n * - If `Content-Type` header has charset parameter, it uses it for decoding.\n * - If `Content-Encoding` header is set, it decompresses the response.\n * - Should there be any conflicting information between the header and the options, the option's value will take precedence.\n *\n * @category Middle-level API\n * @param response\n * @param options\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parseResponse.toArray} function.\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parseResponse(response)) {\n * console.log(record);\n * }\n * ```\n */\nexport function parseResponse<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new Error(\"Response body is null\");\n }\n return parseUint8ArrayStream(response.body, options_);\n}\n\nexport declare namespace parseResponse {\n /**\n * Parse CSV Response to array of records.\n *\n * @returns Array of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parseResponse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV Response to stream of records.\n *\n * @param response Response to parse\n * @returns Stream of records\n *\n * @example Parsing CSV Response\n *\n * ```ts\n * import { parseResponse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * await parseResponse.toStream(response)\n * .pipeTo(\n * new WritableStream({\n * write(record) {\n * console.log(record);\n * },\n * }),\n * );\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\n export function toStream<Header extends ReadonlyArray<string>>(\n response: Response,\n options?: ParseOptions<Header>,\n ): ReadableStream<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parseResponse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n toStreamSync: {\n enumerable: true,\n writable: false,\n value: parseResponseToStream,\n },\n});\n","import {\n CSV,\n CSVBinary,\n CSVRecord,\n CSVString,\n ParseBinaryOptions,\n ParseOptions,\n} from \"./common/types.ts\";\nimport { parseBinary } from \"./parseBinary.ts\";\nimport { parseResponse } from \"./parseResponse.ts\";\nimport { parseString } from \"./parseString.ts\";\nimport { parseStringStream } from \"./parseStringStream.ts\";\nimport { parseUint8ArrayStream } from \"./parseUint8ArrayStream.ts\";\nimport * as internal from \"./utils/convertThisAsyncIterableIteratorToArray.ts\";\n\n/**\n * Parse CSV to records.\n *\n * {@link !String}, {@link !ReadableStream}<string | {@link !Uint8Array}> and {@link !Response} are supported.\n *\n *\n * @typeParam Header Header type like `['name', 'age']`.\n *\n * @param csv CSV string to parse.\n * @param options Parsing options for CSV string parsing.\n * @returns Async iterable iterator of records.\n *\n * If you want array of records, use {@link parse.toArray} function.\n * @category High-level API\n *\n * @remarks\n * {@link parseString}, {@link parseBinary}, {@link parseUint8ArrayStream},\n * {@link parseStringStream} and {@link parseResponse} are used internally.\n *\n * If you known the type of the CSV, it performs better to use them directly.\n *\n * | If you want to parse a... | Use... | Options... |\n * | -------------------------------------------- | ----------------------------- | -------------------------- |\n * | {@link !String} | {@link parseString} | {@link ParseOptions} |\n * | {@link !ReadableStream}<{@link !String}> | {@link parseStringStream} | {@link ParseOptions} |\n * | {@link !Uint8Array} \\| {@link !ArrayBuffer} | {@link parseBinary} | {@link ParseBinaryOptions} |\n * | {@link !ReadableStream}<{@link !Uint8Array}> | {@link parseUint8ArrayStream} | {@link ParseBinaryOptions} |\n * | {@link !Response} | {@link parseResponse} | {@link ParseBinaryOptions} |\n *\n * @example Parsing CSV files from strings\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files from streams\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const stream = new ReadableStream({\n * start(controller) {\n * controller.enqueue(csv);\n * controller.close();\n * }\n * });\n *\n * for await (const record of parse(stream)) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n *\n * @example Parsing CSV files with headers\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV has no header.\n * const csv = `Alice,42\n * Bob,69`;\n *\n * for await (const record of parse(csv, { header: ['name', 'age'] })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n *\n * @example Parsing CSV files with different delimiters characters\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name\\tage\n * Alice\\t42\n * Bob\\t69`;\n *\n * for await (const record of parse(csv, { delimiter: '\\t' })) {\n * console.log(record);\n * }\n * // Prints:\n * // { name: 'Alice', age: '42' }\n * // { name: 'Bob', age: '69' }\n * ```\n */\nexport function parse<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\n/**\n * Parse CSV binary to records.\n *\n * @param csv CSV binary to parse.\n * @param options Parsing options for CSV binary parsing.\n *\n * @example Parsing CSV files from responses\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is not gzipped and encoded in utf-8.\n * const response = await fetch('https://example.com/data.csv');\n *\n * for await (const record of parse(response)) {\n * // ...\n * }\n * ```\n *\n * @example Parsing CSV files with options spcialized for binary\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * // This CSV data is gzipped and encoded in shift-jis and has BOM.\n * const response = await fetch('https://example.com/data.csv.gz');\n *\n * for await (const record of parse(response, {\n * charset: 'shift-jis',\n * ignoreBOM: true,\n * decomposition: 'gzip',\n * })) {\n * // ...\n * }\n * ```\n */\nexport function parse<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>>;\nexport async function* parse<Header extends ReadonlyArray<string>>(\n csv: CSV,\n options?: ParseBinaryOptions<Header>,\n): AsyncIterableIterator<CSVRecord<Header>> {\n if (typeof csv === \"string\") {\n yield* parseString(csv, options);\n } else if (csv instanceof Uint8Array || csv instanceof ArrayBuffer) {\n yield* parseBinary(csv, options);\n } else if (csv instanceof ReadableStream) {\n const [branch1, branch2] = csv.tee();\n const reader1 = branch1.getReader();\n const { value: firstChunk } = await reader1.read();\n reader1.releaseLock();\n if (typeof firstChunk === \"string\") {\n yield* parseStringStream(branch2 as ReadableStream<string>, options);\n } else if (firstChunk instanceof Uint8Array) {\n yield* parseUint8ArrayStream(\n branch2 as ReadableStream<Uint8Array>,\n options,\n );\n }\n } else if (csv instanceof Response) {\n yield* parseResponse(csv, options);\n }\n}\n\nexport declare namespace parse {\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const csv = `name,age\n * Alice,42\n * Bob,69`;\n *\n * const records = await parse.toArray(csv);\n * console.log(records);\n * // Prints:\n * // [ { name: 'Alice', age: '42' }, { name: 'Bob', age: '69' } ]\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVString,\n options?: ParseOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n /**\n * Parse CSV string to array of records,\n * ideal for smaller data sets.\n *\n * @example Parse a CSV as array of records\n *\n * ```ts\n * import { parse } from 'web-csv-toolbox';\n *\n * const response = await fetch('https://example.com/data.csv');\n *\n * const records = await parse.toArray(response);\n * console.log(records);\n * ```\n */\n export function toArray<Header extends ReadonlyArray<string>>(\n csv: CSVBinary,\n options?: ParseBinaryOptions<Header>,\n ): Promise<CSVRecord<Header>[]>;\n}\n\nObject.defineProperties(parse, {\n toArray: {\n enumerable: true,\n writable: false,\n value: internal.convertThisAsyncIterableIteratorToArray,\n },\n});\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { convertBinaryToString } from \"./convertBinaryToString.ts\";\nimport { parseStringToArraySync } from \"./parseStringToArraySync.ts\";\n\nexport function parseBinaryToArraySync<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): CSVRecord<Header>[] {\n const csv = convertBinaryToString(binary, options);\n return parseStringToArraySync(csv, options);\n}\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.ts\";\nimport { convertBinaryToString } from \"./convertBinaryToString.ts\";\nimport { parseStringToStream } from \"./parseStringToStream.ts\";\n\nexport function parseBinaryToStream<Header extends ReadonlyArray<string>>(\n binary: Uint8Array | ArrayBuffer,\n options: ParseBinaryOptions<Header> = {},\n): ReadableStream<CSVRecord<Header>> {\n const csv = convertBinaryToString(binary, options);\n return parseStringToStream(csv, options);\n}\n","import { CSVRecord, ParseBinaryOptions } from \"./common/types.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 const options_ = getOptionsFromResponse(response, options);\n if (response.body === null) {\n throw new Error(\"Response body is null\");\n }\n return parseUint8ArrayStreamToStream(response.body, options_);\n}\n","import init, { InitInput } from \"web-csv-toolbox-wasm\";\n\nimport dataURL from \"web-csv-toolbox-wasm/web_csv_toolbox_wasm_bg.wasm\";\n\n/**\n * Load WASM module.\n *\n * This must be called before calling WebAssembly functions.\n *\n * @example\n *\n * ```ts\n * import { loadWASM, parseStringWASM } from \"web-csv-toolbox\";\n *\n * await loadWASM();\n *\n * const csv = \"a,b,c\\n1,2,3\";\n * const parsed = parseStringWASM(csv);\n * ```\n */\nexport async function loadWASM(input?: InitInput | Promise<InitInput>) {\n await init(input ?? dataURL);\n}\n","import { parseStringToArraySync } from \"web-csv-toolbox-wasm\";\nimport { 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 Error(\"Invalid delimiter, must be a single character on WASM.\");\n }\n if (quotation !== DOUBLE_QUOTE) {\n throw new Error(\"Invalid quotation, must be double quote on WASM.\");\n }\n const demiliterCode = delimiter.charCodeAt(0);\n return JSON.parse(parseStringToArraySync(csv, demiliterCode));\n}\n"],"names":["FieldDelimiter","Symbol","for","RecordDelimiter","Field","CRLF","LF","COMMA","DOUBLE_QUOTE","escapeRegExp","v","replace","Lexer","delimiter","delimiterLength","quotation","quotationLength","matcher","buffer","flush","constructor","options","length","Error","includes","assertCommonOptions","this","d","q","RegExp","lex","chunk","buffering","tokens","endsWith","slice","currentField","token","nextToken","value","startsWith","extractQuotedString","match","exec","type","end","LexerTransformer","TransformStream","lexer","super","transform","controller","enqueue","RecordAssembler","fieldIndex","row","header","dirty","Array","isArray","setHeader","assemble","Object","fromEntries","map","index","at","fill","filter","Set","size","RecordAssemblerTransformer","assembler","parseStringToArraySync","csv","parseStringToIterableIterator","parseStringToStream","ReadableStream","start","record","close","async","convertThisAsyncIterableIteratorToArray","args","rows","push","parseString","convertBinaryToString","binary","TextDecoder","charset","ignoreBOM","fatal","decode","ArrayBuffer","Uint8Array","parseBinaryToIterableIterator","parseBinary","bytes","iterator","next","result","Promise","resolve","asyncIterator","convertIterableIteratorToAsync","pipeline","stream","transformers","reduce","transformer","pipeThrough","pipeTo","WritableStream","write","parseUint8ArrayStreamToStream","decomposition","DecompressionStream","TextDecoderStream","convertStreamToAsyncIterableIterator","reader","getReader","done","read","parseUint8ArrayStream","parseStringStreamToStream","parseStringStream","getOptionsFromResponse","response","headers","contentType","get","mime","parameters","split","trim","paramator","key","parseMime","parseResponse","options_","body","parse","branch1","branch2","tee","reader1","firstChunk","releaseLock","Response","defineProperties","toArray","enumerable","writable","internal.convertThisAsyncIterableIteratorToArray","toArraySync","toIterableIterator","toStream","toStreamSync","input","init","demiliterCode","charCodeAt","JSON"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "web-csv-toolbox",
3
- "version": "0.0.0-next-20240205123651",
3
+ "version": "0.0.0-next-20240205154048",
4
4
  "description": "A CSV Toolbox utilizing Web Standard APIs.",
5
5
  "type": "module",
6
6
  "main": "dist/cjs/web-csv-toolbox.cjs",