web-csv-toolbox 0.13.0-next-c1addc26c62ad2577b7b9eaaa3a44fde79d5e05c → 0.13.0-next-cec6905200814e21efa17adbb4a6652519dd1e74

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,5 +1,5 @@
1
1
  import { Lexer } from './Lexer.ts';
2
- import { CommonOptions, Token } from './common/types.ts';
2
+ import { LexerTransformerOptions, Token } from './common/types.ts';
3
3
  import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from './constants.ts';
4
4
  /**
5
5
  * A transform stream that converts a stream of tokens into a stream of rows.
@@ -33,5 +33,5 @@ import { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from './constants.ts';
33
33
  */
34
34
  export declare class LexerTransformer<Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION> extends TransformStream<string, Token[]> {
35
35
  readonly lexer: Lexer<Delimiter, Quotation>;
36
- constructor(options?: CommonOptions<Delimiter, Quotation>);
36
+ constructor(options?: LexerTransformerOptions<Delimiter, Quotation>);
37
37
  }
@@ -3,11 +3,12 @@ import { Lexer } from './Lexer.js';
3
3
  class LexerTransformer extends TransformStream {
4
4
  lexer;
5
5
  constructor(options = {}) {
6
+ const lexer = new Lexer(options);
6
7
  super({
7
8
  transform: (chunk, controller) => {
8
9
  if (chunk.length !== 0) {
9
10
  try {
10
- controller.enqueue([...this.lexer.lex(chunk, true)]);
11
+ controller.enqueue([...lexer.lex(chunk, true)]);
11
12
  } catch (error) {
12
13
  controller.error(error);
13
14
  }
@@ -15,13 +16,13 @@ class LexerTransformer extends TransformStream {
15
16
  },
16
17
  flush: (controller) => {
17
18
  try {
18
- controller.enqueue(this.lexer.flush());
19
+ controller.enqueue(lexer.flush());
19
20
  } catch (error) {
20
21
  controller.error(error);
21
22
  }
22
23
  }
23
24
  });
24
- this.lexer = new Lexer(options);
25
+ this.lexer = lexer;
25
26
  }
26
27
  }
27
28
 
@@ -1 +1 @@
1
- {"version":3,"file":"LexerTransformer.js","sources":["../src/LexerTransformer.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport type { CommonOptions, Token } from \"./common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeTo(new WritableStream({ write(tokens) {\n * for (const token of tokens) {\n * console.log(token);\n * }\n * }}));\n * // { type: Field, value: \"name\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"age\", location: {...} }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * // { type: Field, value: \"Alice\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"20\" }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * ```\n */\nexport class LexerTransformer<\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n> extends TransformStream<string, Token[]> {\n public readonly lexer: Lexer<Delimiter, Quotation>;\n constructor(options: CommonOptions<Delimiter, Quotation> = {}) {\n super({\n transform: (chunk, controller) => {\n if (chunk.length !== 0) {\n try {\n controller.enqueue([...this.lexer.lex(chunk, true)]);\n } catch (error) {\n controller.error(error);\n }\n }\n },\n flush: (controller) => {\n try {\n controller.enqueue(this.lexer.flush());\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.lexer = new Lexer(options);\n }\n}\n"],"names":[],"mappings":";;AAkCO,MAAM,yBAGH,eAAiC,CAAA;AAAA,EACzB,KAAA;AAAA,EAChB,WAAA,CAAY,OAA+C,GAAA,EAAI,EAAA;AAC7D,IAAM,KAAA,CAAA;AAAA,MACJ,SAAA,EAAW,CAAC,KAAA,EAAO,UAAe,KAAA;AAChC,QAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,UAAI,IAAA;AACF,YAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,GAAG,IAAA,CAAK,MAAM,GAAI,CAAA,KAAA,EAAO,IAAI,CAAC,CAAC,CAAA;AAAA,mBAC5C,KAAO,EAAA;AACd,YAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB;AACF,OACF;AAAA,MACA,KAAA,EAAO,CAAC,UAAe,KAAA;AACrB,QAAI,IAAA;AACF,UAAA,UAAA,CAAW,OAAQ,CAAA,IAAA,CAAK,KAAM,CAAA,KAAA,EAAO,CAAA;AAAA,iBAC9B,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB;AACF,KACD,CAAA;AACD,IAAK,IAAA,CAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAAA;AAElC;;;;"}
1
+ {"version":3,"file":"LexerTransformer.js","sources":["../src/LexerTransformer.ts"],"sourcesContent":["import { Lexer } from \"./Lexer.ts\";\nimport type { LexerTransformerOptions, Token } from \"./common/types.ts\";\nimport type { DEFAULT_DELIMITER, DEFAULT_QUOTATION } from \"./constants.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeTo(new WritableStream({ write(tokens) {\n * for (const token of tokens) {\n * console.log(token);\n * }\n * }}));\n * // { type: Field, value: \"name\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"age\", location: {...} }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * // { type: Field, value: \"Alice\", location: {...} }\n * // { type: FieldDelimiter, value: \",\", location: {...} }\n * // { type: Field, value: \"20\" }\n * // { type: RecordDelimiter, value: \"\\r\\n\", location: {...} }\n * ```\n */\nexport class LexerTransformer<\n Delimiter extends string = DEFAULT_DELIMITER,\n Quotation extends string = DEFAULT_QUOTATION,\n> extends TransformStream<string, Token[]> {\n public readonly lexer: Lexer<Delimiter, Quotation>;\n constructor(options: LexerTransformerOptions<Delimiter, Quotation> = {}) {\n const lexer = new Lexer(options);\n super({\n transform: (chunk, controller) => {\n if (chunk.length !== 0) {\n try {\n controller.enqueue([...lexer.lex(chunk, true)]);\n } catch (error) {\n controller.error(error);\n }\n }\n },\n flush: (controller) => {\n try {\n controller.enqueue(lexer.flush());\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.lexer = lexer;\n }\n}\n"],"names":[],"mappings":";;AAkCO,MAAM,yBAGH,eAAiC,CAAA;AAAA,EACzB,KAAA;AAAA,EAChB,WAAA,CAAY,OAAyD,GAAA,EAAI,EAAA;AACvE,IAAM,MAAA,KAAA,GAAQ,IAAI,KAAA,CAAM,OAAO,CAAA;AAC/B,IAAM,KAAA,CAAA;AAAA,MACJ,SAAA,EAAW,CAAC,KAAA,EAAO,UAAe,KAAA;AAChC,QAAI,IAAA,KAAA,CAAM,WAAW,CAAG,EAAA;AACtB,UAAI,IAAA;AACF,YAAW,UAAA,CAAA,OAAA,CAAQ,CAAC,GAAG,KAAA,CAAM,IAAI,KAAO,EAAA,IAAI,CAAC,CAAC,CAAA;AAAA,mBACvC,KAAO,EAAA;AACd,YAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB;AACF,OACF;AAAA,MACA,KAAA,EAAO,CAAC,UAAe,KAAA;AACrB,QAAI,IAAA;AACF,UAAW,UAAA,CAAA,OAAA,CAAQ,KAAM,CAAA,KAAA,EAAO,CAAA;AAAA,iBACzB,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB;AACF,KACD,CAAA;AACD,IAAA,IAAA,CAAK,KAAQ,GAAA,KAAA;AAAA;AAEjB;;;;"}
@@ -3,10 +3,11 @@ import { RecordAssembler } from './RecordAssembler.js';
3
3
  class RecordAssemblerTransformer extends TransformStream {
4
4
  assembler;
5
5
  constructor(options = {}) {
6
+ const assembler = new RecordAssembler(options);
6
7
  super({
7
8
  transform: (tokens, controller) => {
8
9
  try {
9
- for (const token of this.assembler.assemble(tokens, false)) {
10
+ for (const token of assembler.assemble(tokens, false)) {
10
11
  controller.enqueue(token);
11
12
  }
12
13
  } catch (error) {
@@ -15,7 +16,7 @@ class RecordAssemblerTransformer extends TransformStream {
15
16
  },
16
17
  flush: (controller) => {
17
18
  try {
18
- for (const token of this.assembler.flush()) {
19
+ for (const token of assembler.flush()) {
19
20
  controller.enqueue(token);
20
21
  }
21
22
  } catch (error) {
@@ -23,7 +24,7 @@ class RecordAssemblerTransformer extends TransformStream {
23
24
  }
24
25
  }
25
26
  });
26
- this.assembler = new RecordAssembler(options);
27
+ this.assembler = assembler;
27
28
  }
28
29
  }
29
30
 
@@ -1 +1 @@
1
- {"version":3,"file":"RecordAssemblerTransformer.js","sources":["../src/RecordAssemblerTransformer.ts"],"sourcesContent":["import { RecordAssembler } from \"./RecordAssembler.ts\";\nimport type {\n CSVRecord,\n RecordAssemblerOptions,\n Token,\n} from \"./common/types.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n * @template Header The type of the header row.\n * @param options The options for the parser.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer())\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n *\n * @example Parse a CSV with headers by options\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer({ header: [\"name\", \"age\"] }))\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n */\nexport class RecordAssemblerTransformer<\n Header extends ReadonlyArray<string>,\n> extends TransformStream<Token[], CSVRecord<Header>> {\n public readonly assembler: RecordAssembler<Header>;\n\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n super({\n transform: (tokens, controller) => {\n try {\n for (const token of this.assembler.assemble(tokens, false)) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n flush: (controller) => {\n try {\n for (const token of this.assembler.flush()) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.assembler = new RecordAssembler(options);\n }\n}\n"],"names":[],"mappings":";;AAkDO,MAAM,mCAEH,eAA4C,CAAA;AAAA,EACpC,SAAA;AAAA,EAEhB,WAAA,CAAY,OAA0C,GAAA,EAAI,EAAA;AACxD,IAAM,KAAA,CAAA;AAAA,MACJ,SAAA,EAAW,CAAC,MAAA,EAAQ,UAAe,KAAA;AACjC,QAAI,IAAA;AACF,UAAA,KAAA,MAAW,SAAS,IAAK,CAAA,SAAA,CAAU,QAAS,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AAC1D,YAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,iBACO,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB,OACF;AAAA,MACA,KAAA,EAAO,CAAC,UAAe,KAAA;AACrB,QAAI,IAAA;AACF,UAAA,KAAA,MAAW,KAAS,IAAA,IAAA,CAAK,SAAU,CAAA,KAAA,EAAS,EAAA;AAC1C,YAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,iBACO,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB;AACF,KACD,CAAA;AACD,IAAK,IAAA,CAAA,SAAA,GAAY,IAAI,eAAA,CAAgB,OAAO,CAAA;AAAA;AAEhD;;;;"}
1
+ {"version":3,"file":"RecordAssemblerTransformer.js","sources":["../src/RecordAssemblerTransformer.ts"],"sourcesContent":["import { RecordAssembler } from \"./RecordAssembler.ts\";\nimport type {\n CSVRecord,\n RecordAssemblerOptions,\n Token,\n} from \"./common/types.ts\";\n\n/**\n * A transform stream that converts a stream of tokens into a stream of rows.\n * @template Header The type of the header row.\n * @param options The options for the parser.\n *\n * @category Low-level API\n *\n * @example Parse a CSV with headers by data\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"name,age\\r\\n\");\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer())\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n *\n * @example Parse a CSV with headers by options\n * ```ts\n * new ReadableStream({\n * start(controller) {\n * controller.enqueue(\"Alice,20\\r\\n\");\n * controller.enqueue(\"Bob,25\\r\\n\");\n * controller.enqueue(\"Charlie,30\\r\\n\");\n * controller.close();\n * }\n * })\n * .pipeThrough(new LexerTransformer())\n * .pipeThrough(new RecordAssemblerTransformer({ header: [\"name\", \"age\"] }))\n * .pipeTo(new WritableStream({ write(row) { console.log(row); }}));\n * // { name: \"Alice\", age: \"20\" }\n * // { name: \"Bob\", age: \"25\" }\n * // { name: \"Charlie\", age: \"30\" }\n * ```\n */\nexport class RecordAssemblerTransformer<\n Header extends ReadonlyArray<string>,\n> extends TransformStream<Token[], CSVRecord<Header>> {\n public readonly assembler: RecordAssembler<Header>;\n\n constructor(options: RecordAssemblerOptions<Header> = {}) {\n const assembler = new RecordAssembler(options);\n super({\n transform: (tokens, controller) => {\n try {\n for (const token of assembler.assemble(tokens, false)) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n flush: (controller) => {\n try {\n for (const token of assembler.flush()) {\n controller.enqueue(token);\n }\n } catch (error) {\n controller.error(error);\n }\n },\n });\n this.assembler = assembler;\n }\n}\n"],"names":[],"mappings":";;AAkDO,MAAM,mCAEH,eAA4C,CAAA;AAAA,EACpC,SAAA;AAAA,EAEhB,WAAA,CAAY,OAA0C,GAAA,EAAI,EAAA;AACxD,IAAM,MAAA,SAAA,GAAY,IAAI,eAAA,CAAgB,OAAO,CAAA;AAC7C,IAAM,KAAA,CAAA;AAAA,MACJ,SAAA,EAAW,CAAC,MAAA,EAAQ,UAAe,KAAA;AACjC,QAAI,IAAA;AACF,UAAA,KAAA,MAAW,KAAS,IAAA,SAAA,CAAU,QAAS,CAAA,MAAA,EAAQ,KAAK,CAAG,EAAA;AACrD,YAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,iBACO,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB,OACF;AAAA,MACA,KAAA,EAAO,CAAC,UAAe,KAAA;AACrB,QAAI,IAAA;AACF,UAAW,KAAA,MAAA,KAAA,IAAS,SAAU,CAAA,KAAA,EAAS,EAAA;AACrC,YAAA,UAAA,CAAW,QAAQ,KAAK,CAAA;AAAA;AAC1B,iBACO,KAAO,EAAA;AACd,UAAA,UAAA,CAAW,MAAM,KAAK,CAAA;AAAA;AACxB;AACF,KACD,CAAA;AACD,IAAA,IAAA,CAAK,SAAY,GAAA,SAAA;AAAA;AAErB;;;;"}
@@ -253,6 +253,12 @@ export interface BinaryOptions {
253
253
  */
254
254
  allowExperimentalCompressions?: boolean;
255
255
  }
256
+ /**
257
+ * Lexer Transformer Options for CSV.
258
+ * @category Types
259
+ */
260
+ export interface LexerTransformerOptions<Delimiter extends string = DEFAULT_DELIMITER, Quotation extends string = DEFAULT_QUOTATION> extends CommonOptions<Delimiter, Quotation>, AbortSignalOptions {
261
+ }
256
262
  /**
257
263
  * Record Assembler Options for CSV.
258
264
  * @category Types
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "web-csv-toolbox",
3
- "version": "0.13.0-next-c1addc26c62ad2577b7b9eaaa3a44fde79d5e05c",
3
+ "version": "0.13.0-next-cec6905200814e21efa17adbb4a6652519dd1e74",
4
4
  "description": "A CSV Toolbox utilizing Web Standard APIs.",
5
5
  "type": "module",
6
6
  "module": "dist/web-csv-toolbox.js",