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 {
|
|
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?:
|
|
36
|
+
constructor(options?: LexerTransformerOptions<Delimiter, Quotation>);
|
|
37
37
|
}
|
package/dist/LexerTransformer.js
CHANGED
|
@@ -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([...
|
|
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(
|
|
19
|
+
controller.enqueue(lexer.flush());
|
|
19
20
|
} catch (error) {
|
|
20
21
|
controller.error(error);
|
|
21
22
|
}
|
|
22
23
|
}
|
|
23
24
|
});
|
|
24
|
-
this.lexer =
|
|
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 {
|
|
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
|
|
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
|
|
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 =
|
|
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
|
|
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;;;;"}
|
package/dist/common/types.d.ts
CHANGED
|
@@ -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-
|
|
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",
|