convert-buddy-js 0.7.0 → 0.9.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist/chunk-DESHN2IK.js.map +1 -0
  2. package/dist/{chunk-WBKHAQCT.js → chunk-EW7HKBIV.js} +3 -2
  3. package/dist/chunk-EW7HKBIV.js.map +1 -0
  4. package/dist/{chunk-C3RSVYQF.js → chunk-KMYCJF2Y.js} +2 -2
  5. package/dist/chunk-KMYCJF2Y.js.map +1 -0
  6. package/dist/src/bench/datasets.d.ts +12 -0
  7. package/dist/src/bench/datasets.js +149 -0
  8. package/dist/src/bench/datasets.js.map +1 -0
  9. package/dist/src/bench/runner-with-competitors.d.ts +2 -0
  10. package/dist/src/bench/runner-with-competitors.js +330 -0
  11. package/dist/src/bench/runner-with-competitors.js.map +1 -0
  12. package/dist/src/bench/runner.d.ts +2 -0
  13. package/dist/src/bench/runner.js +160 -0
  14. package/dist/src/bench/runner.js.map +1 -0
  15. package/dist/src/src/index.js +191 -0
  16. package/dist/src/src/index.js.map +1 -0
  17. package/dist/src/src/node.js +59 -0
  18. package/dist/src/src/node.js.map +1 -0
  19. package/dist/src/src/smoke-test.d.ts +2 -0
  20. package/dist/src/src/smoke-test.js +210 -0
  21. package/dist/src/src/smoke-test.js.map +1 -0
  22. package/dist/wasm/nodejs/convert_buddy.d.ts +52 -0
  23. package/dist/wasm/nodejs/convert_buddy.js +637 -0
  24. package/dist/wasm/nodejs/convert_buddy_bg.wasm +0 -0
  25. package/dist/wasm/nodejs/convert_buddy_bg.wasm.d.ts +31 -0
  26. package/dist/wasm/nodejs/package.json +13 -0
  27. package/dist/wasm/web/convert_buddy.d.ts +107 -0
  28. package/dist/wasm/web/convert_buddy.js +695 -0
  29. package/dist/wasm/web/convert_buddy_bg.wasm +0 -0
  30. package/dist/wasm/web/convert_buddy_bg.wasm.d.ts +31 -0
  31. package/dist/wasm/web/package.json +17 -0
  32. package/package.json +5 -11
  33. package/wasm-node.cjs +10 -1
  34. package/dist/src/index.js +0 -17
  35. package/dist/src/node.js +0 -21
  36. /package/dist/src/{index.d.ts → src/index.d.ts} +0 -0
  37. /package/dist/src/{node.d.ts → src/node.d.ts} +0 -0
@@ -0,0 +1,210 @@
1
+ import { ConvertBuddy, convert, convertToString } from "./index.js";
2
+ async function testBasicConversion() {
3
+ console.log("\n=== Test: Basic CSV to NDJSON ===");
4
+ const csvData = `name,age,city
5
+ Alice,30,New York
6
+ Bob,25,London
7
+ Charlie,35,Tokyo`;
8
+ const result = await convertToString(csvData, {
9
+ inputFormat: "csv",
10
+ outputFormat: "ndjson",
11
+ debug: false,
12
+ profile: true
13
+ });
14
+ console.log("Input CSV:");
15
+ console.log(csvData);
16
+ console.log("\nOutput NDJSON:");
17
+ console.log(result);
18
+ const lines = result.trim().split("\n");
19
+ if (lines.length !== 3) {
20
+ throw new Error(`Expected 3 lines, got ${lines.length}`);
21
+ }
22
+ const firstRecord = JSON.parse(lines[0]);
23
+ if (firstRecord.name !== "Alice") {
24
+ throw new Error(`Expected name=Alice, got ${firstRecord.name}`);
25
+ }
26
+ console.log("\u2713 Basic conversion test passed");
27
+ }
28
+ async function testStreamingAPI() {
29
+ console.log("\n=== Test: Streaming API ===");
30
+ const buddy = await ConvertBuddy.create({
31
+ inputFormat: "csv",
32
+ outputFormat: "ndjson",
33
+ debug: false
34
+ });
35
+ const header = new TextEncoder().encode("name,age\n");
36
+ const row1 = new TextEncoder().encode("Alice,30\n");
37
+ const row2 = new TextEncoder().encode("Bob,25\n");
38
+ const out1 = buddy.push(header);
39
+ const out2 = buddy.push(row1);
40
+ const out3 = buddy.push(row2);
41
+ const final = buddy.finish();
42
+ const combined = new Uint8Array(
43
+ out1.length + out2.length + out3.length + final.length
44
+ );
45
+ combined.set(out1, 0);
46
+ combined.set(out2, out1.length);
47
+ combined.set(out3, out1.length + out2.length);
48
+ combined.set(final, out1.length + out2.length + out3.length);
49
+ const result = new TextDecoder().decode(combined);
50
+ console.log("Streaming result:");
51
+ console.log(result);
52
+ console.log("\u2713 Streaming API test passed");
53
+ }
54
+ async function testNdjsonToJson() {
55
+ console.log("\n=== Test: NDJSON to JSON Array ===");
56
+ const ndjsonData = `{"name":"Alice","age":30}
57
+ {"name":"Bob","age":25}
58
+ {"name":"Charlie","age":35}`;
59
+ const result = await convertToString(ndjsonData, {
60
+ inputFormat: "ndjson",
61
+ outputFormat: "json",
62
+ debug: false
63
+ });
64
+ console.log("Input NDJSON:");
65
+ console.log(ndjsonData);
66
+ console.log("\nOutput JSON:");
67
+ console.log(result);
68
+ const parsed = JSON.parse(result);
69
+ if (!Array.isArray(parsed)) {
70
+ throw new Error("Expected JSON array");
71
+ }
72
+ if (parsed.length !== 3) {
73
+ throw new Error(`Expected 3 items, got ${parsed.length}`);
74
+ }
75
+ console.log("\u2713 NDJSON to JSON test passed");
76
+ }
77
+ async function testQuotedCsv() {
78
+ console.log("\n=== Test: Quoted CSV with Commas ===");
79
+ const csvData = `name,description
80
+ "Alice","Hello, World"
81
+ "Bob","Test, with, commas"
82
+ "Charlie","Normal text"`;
83
+ const result = await convertToString(csvData, {
84
+ inputFormat: "csv",
85
+ outputFormat: "ndjson",
86
+ debug: false
87
+ });
88
+ console.log("Input CSV:");
89
+ console.log(csvData);
90
+ console.log("\nOutput NDJSON:");
91
+ console.log(result);
92
+ const lines = result.trim().split("\n");
93
+ const firstRecord = JSON.parse(lines[0]);
94
+ if (!firstRecord.description.includes(",")) {
95
+ throw new Error("Expected comma in description to be preserved");
96
+ }
97
+ console.log("\u2713 Quoted CSV test passed");
98
+ }
99
+ async function testStats() {
100
+ console.log("\n=== Test: Performance Stats ===");
101
+ const csvData = `name,age
102
+ Alice,30
103
+ Bob,25
104
+ Charlie,35`;
105
+ const result = await convert(new TextEncoder().encode(csvData), {
106
+ inputFormat: "csv",
107
+ outputFormat: "ndjson",
108
+ profile: true
109
+ });
110
+ console.log("\u2713 Stats test passed");
111
+ }
112
+ async function testPartialLines() {
113
+ console.log("\n=== Test: Partial Line Handling ===");
114
+ const buddy = await ConvertBuddy.create({
115
+ inputFormat: "csv",
116
+ outputFormat: "ndjson",
117
+ debug: false
118
+ });
119
+ const chunk1 = new TextEncoder().encode("name,age\nAli");
120
+ const chunk2 = new TextEncoder().encode("ce,30\nBob,25\n");
121
+ const out1 = buddy.push(chunk1);
122
+ const out2 = buddy.push(chunk2);
123
+ const final = buddy.finish();
124
+ const combined = new Uint8Array(out1.length + out2.length + final.length);
125
+ combined.set(out1, 0);
126
+ combined.set(out2, out1.length);
127
+ combined.set(final, out1.length + out2.length);
128
+ const result = new TextDecoder().decode(combined);
129
+ console.log("Result with partial lines:");
130
+ console.log(result);
131
+ const lines = result.trim().split("\n");
132
+ if (lines.length !== 2) {
133
+ throw new Error(`Expected 2 lines, got ${lines.length}`);
134
+ }
135
+ const firstRecord = JSON.parse(lines[0]);
136
+ if (firstRecord.name !== "Alice") {
137
+ throw new Error(`Expected name=Alice, got ${firstRecord.name}`);
138
+ }
139
+ console.log("\u2713 Partial line test passed");
140
+ }
141
+ async function testLargeDataset() {
142
+ console.log("\n=== Test: Large Dataset Performance ===");
143
+ const rows = 1e4;
144
+ let csv = "id,name,value\n";
145
+ for (let i = 0; i < rows; i++) {
146
+ csv += `${i},name_${i},${i * 100}
147
+ `;
148
+ }
149
+ const start = performance.now();
150
+ const result = await convert(new TextEncoder().encode(csv), {
151
+ inputFormat: "csv",
152
+ outputFormat: "ndjson",
153
+ profile: true
154
+ });
155
+ const end = performance.now();
156
+ const lines = new TextDecoder().decode(result).trim().split("\n");
157
+ console.log(`Processed ${rows} rows in ${(end - start).toFixed(2)}ms`);
158
+ console.log(`Throughput: ${(csv.length / (1024 * 1024) / ((end - start) / 1e3)).toFixed(2)} MB/s`);
159
+ console.log(`Output lines: ${lines.length}`);
160
+ if (lines.length !== rows) {
161
+ throw new Error(`Expected ${rows} lines, got ${lines.length}`);
162
+ }
163
+ console.log("\u2713 Large dataset test passed");
164
+ }
165
+ async function testEmptyAndWhitespace() {
166
+ console.log("\n=== Test: Empty Lines and Whitespace ===");
167
+ const csvData = `name,age
168
+
169
+ Alice,30
170
+
171
+ Bob,25
172
+ `;
173
+ const result = await convertToString(csvData, {
174
+ inputFormat: "csv",
175
+ outputFormat: "ndjson",
176
+ debug: false
177
+ });
178
+ console.log("Input CSV (with empty lines):");
179
+ console.log(JSON.stringify(csvData));
180
+ console.log("\nOutput NDJSON:");
181
+ console.log(result);
182
+ const lines = result.trim().split("\n").filter((l) => l.length > 0);
183
+ if (lines.length !== 2) {
184
+ throw new Error(`Expected 2 non-empty lines, got ${lines.length}`);
185
+ }
186
+ console.log("\u2713 Empty lines test passed");
187
+ }
188
+ async function runAllTests() {
189
+ console.log("\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
190
+ console.log("\u2551 Convert Buddy - Smoke Test Suite \u2551");
191
+ console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D");
192
+ try {
193
+ await testBasicConversion();
194
+ await testStreamingAPI();
195
+ await testNdjsonToJson();
196
+ await testQuotedCsv();
197
+ await testStats();
198
+ await testPartialLines();
199
+ await testLargeDataset();
200
+ await testEmptyAndWhitespace();
201
+ console.log("\n\u2554\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2557");
202
+ console.log("\u2551 \u2713 All tests passed successfully! \u2551");
203
+ console.log("\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n");
204
+ } catch (error) {
205
+ console.error("\n\u2717 Test failed:", error);
206
+ process.exit(1);
207
+ }
208
+ }
209
+ runAllTests();
210
+ //# sourceMappingURL=smoke-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/smoke-test.ts"],"sourcesContent":["import { ConvertBuddy, convert, convertToString } from \"./index.js\";\r\nimport { createNodeTransform } from \"../src/node.js\";\r\n\r\n\r\nasync function testBasicConversion() {\r\n console.log(\"\\n=== Test: Basic CSV to NDJSON ===\");\r\n \r\n const csvData = `name,age,city\r\nAlice,30,New York\r\nBob,25,London\r\nCharlie,35,Tokyo`;\r\n\r\n const result = await convertToString(csvData, {\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n debug: false,\r\n profile: true,\r\n });\r\n\r\n console.log(\"Input CSV:\");\r\n console.log(csvData);\r\n console.log(\"\\nOutput NDJSON:\");\r\n console.log(result);\r\n\r\n // Validate output\r\n const lines = result.trim().split(\"\\n\");\r\n if (lines.length !== 3) {\r\n throw new Error(`Expected 3 lines, got ${lines.length}`);\r\n }\r\n\r\n const firstRecord = JSON.parse(lines[0]);\r\n if (firstRecord.name !== \"Alice\") {\r\n throw new Error(`Expected name=Alice, got ${firstRecord.name}`);\r\n }\r\n\r\n console.log(\"✓ Basic conversion test passed\");\r\n}\r\n\r\nasync function testStreamingAPI() {\r\n console.log(\"\\n=== Test: Streaming API ===\");\r\n\r\n const buddy = await ConvertBuddy.create({\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n debug: false,\r\n });\r\n\r\n // Push data in chunks\r\n const header = new TextEncoder().encode(\"name,age\\n\");\r\n const row1 = new TextEncoder().encode(\"Alice,30\\n\");\r\n const row2 = new TextEncoder().encode(\"Bob,25\\n\");\r\n\r\n const out1 = buddy.push(header);\r\n const out2 = buddy.push(row1);\r\n const out3 = buddy.push(row2);\r\n const final = buddy.finish();\r\n\r\n const combined = new Uint8Array(\r\n out1.length + out2.length + out3.length + final.length\r\n );\r\n combined.set(out1, 0);\r\n combined.set(out2, out1.length);\r\n combined.set(out3, out1.length + out2.length);\r\n combined.set(final, out1.length + out2.length + out3.length);\r\n\r\n const result = new TextDecoder().decode(combined);\r\n console.log(\"Streaming result:\");\r\n console.log(result);\r\n\r\n console.log(\"✓ Streaming API test passed\");\r\n}\r\n\r\nasync function testNdjsonToJson() {\r\n console.log(\"\\n=== Test: NDJSON to JSON Array ===\");\r\n\r\n const ndjsonData = `{\"name\":\"Alice\",\"age\":30}\r\n{\"name\":\"Bob\",\"age\":25}\r\n{\"name\":\"Charlie\",\"age\":35}`;\r\n\r\n const result = await convertToString(ndjsonData, {\r\n inputFormat: \"ndjson\",\r\n outputFormat: \"json\",\r\n debug: false,\r\n });\r\n\r\n console.log(\"Input NDJSON:\");\r\n console.log(ndjsonData);\r\n console.log(\"\\nOutput JSON:\");\r\n console.log(result);\r\n\r\n // Validate it's valid JSON array\r\n const parsed = JSON.parse(result);\r\n if (!Array.isArray(parsed)) {\r\n throw new Error(\"Expected JSON array\");\r\n }\r\n if (parsed.length !== 3) {\r\n throw new Error(`Expected 3 items, got ${parsed.length}`);\r\n }\r\n\r\n console.log(\"✓ NDJSON to JSON test passed\");\r\n}\r\n\r\nasync function testQuotedCsv() {\r\n console.log(\"\\n=== Test: Quoted CSV with Commas ===\");\r\n\r\n const csvData = `name,description\r\n\"Alice\",\"Hello, World\"\r\n\"Bob\",\"Test, with, commas\"\r\n\"Charlie\",\"Normal text\"`;\r\n\r\n const result = await convertToString(csvData, {\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n debug: false,\r\n });\r\n\r\n console.log(\"Input CSV:\");\r\n console.log(csvData);\r\n console.log(\"\\nOutput NDJSON:\");\r\n console.log(result);\r\n\r\n const lines = result.trim().split(\"\\n\");\r\n const firstRecord = JSON.parse(lines[0]);\r\n \r\n if (!firstRecord.description.includes(\",\")) {\r\n throw new Error(\"Expected comma in description to be preserved\");\r\n }\r\n\r\n console.log(\"✓ Quoted CSV test passed\");\r\n}\r\n\r\nasync function testStats() {\r\n console.log(\"\\n=== Test: Performance Stats ===\");\r\n\r\n const csvData = `name,age\r\nAlice,30\r\nBob,25\r\nCharlie,35`;\r\n\r\n const result = await convert(new TextEncoder().encode(csvData), {\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n profile: true,\r\n });\r\n\r\n // Stats are logged automatically with profile: true\r\n console.log(\"✓ Stats test passed\");\r\n}\r\n\r\nasync function testPartialLines() {\r\n console.log(\"\\n=== Test: Partial Line Handling ===\");\r\n\r\n const buddy = await ConvertBuddy.create({\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n debug: false,\r\n });\r\n\r\n // Split a line across chunks\r\n const chunk1 = new TextEncoder().encode(\"name,age\\nAli\");\r\n const chunk2 = new TextEncoder().encode(\"ce,30\\nBob,25\\n\");\r\n\r\n const out1 = buddy.push(chunk1);\r\n const out2 = buddy.push(chunk2);\r\n const final = buddy.finish();\r\n\r\n const combined = new Uint8Array(out1.length + out2.length + final.length);\r\n combined.set(out1, 0);\r\n combined.set(out2, out1.length);\r\n combined.set(final, out1.length + out2.length);\r\n\r\n const result = new TextDecoder().decode(combined);\r\n console.log(\"Result with partial lines:\");\r\n console.log(result);\r\n\r\n const lines = result.trim().split(\"\\n\");\r\n if (lines.length !== 2) {\r\n throw new Error(`Expected 2 lines, got ${lines.length}`);\r\n }\r\n\r\n const firstRecord = JSON.parse(lines[0]);\r\n if (firstRecord.name !== \"Alice\") {\r\n throw new Error(`Expected name=Alice, got ${firstRecord.name}`);\r\n }\r\n\r\n console.log(\"✓ Partial line test passed\");\r\n}\r\n\r\nasync function testLargeDataset() {\r\n console.log(\"\\n=== Test: Large Dataset Performance ===\");\r\n\r\n // Generate large CSV\r\n const rows = 10000;\r\n let csv = \"id,name,value\\n\";\r\n for (let i = 0; i < rows; i++) {\r\n csv += `${i},name_${i},${i * 100}\\n`;\r\n }\r\n\r\n const start = performance.now();\r\n const result = await convert(new TextEncoder().encode(csv), {\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n profile: true,\r\n });\r\n const end = performance.now();\r\n\r\n const lines = new TextDecoder().decode(result).trim().split(\"\\n\");\r\n \r\n console.log(`Processed ${rows} rows in ${(end - start).toFixed(2)}ms`);\r\n console.log(`Throughput: ${((csv.length / (1024 * 1024)) / ((end - start) / 1000)).toFixed(2)} MB/s`);\r\n console.log(`Output lines: ${lines.length}`);\r\n\r\n if (lines.length !== rows) {\r\n throw new Error(`Expected ${rows} lines, got ${lines.length}`);\r\n }\r\n\r\n console.log(\"✓ Large dataset test passed\");\r\n}\r\n\r\nasync function testEmptyAndWhitespace() {\r\n console.log(\"\\n=== Test: Empty Lines and Whitespace ===\");\r\n\r\n const csvData = `name,age\r\n\r\nAlice,30\r\n\r\nBob,25\r\n`;\r\n\r\n const result = await convertToString(csvData, {\r\n inputFormat: \"csv\",\r\n outputFormat: \"ndjson\",\r\n debug: false,\r\n });\r\n\r\n console.log(\"Input CSV (with empty lines):\");\r\n console.log(JSON.stringify(csvData));\r\n console.log(\"\\nOutput NDJSON:\");\r\n console.log(result);\r\n\r\n const lines = result.trim().split(\"\\n\").filter(l => l.length > 0);\r\n if (lines.length !== 2) {\r\n throw new Error(`Expected 2 non-empty lines, got ${lines.length}`);\r\n }\r\n\r\n console.log(\"✓ Empty lines test passed\");\r\n}\r\n\r\n// Run all tests\r\nasync function runAllTests() {\r\n console.log(\"╔════════════════════════════════════════╗\");\r\n console.log(\"║ Convert Buddy - Smoke Test Suite ║\");\r\n console.log(\"╚════════════════════════════════════════╝\");\r\n\r\n try {\r\n await testBasicConversion();\r\n await testStreamingAPI();\r\n await testNdjsonToJson();\r\n await testQuotedCsv();\r\n await testStats();\r\n await testPartialLines();\r\n await testLargeDataset();\r\n await testEmptyAndWhitespace();\r\n\r\n console.log(\"\\n╔════════════════════════════════════════╗\");\r\n console.log(\"║ ✓ All tests passed successfully! ║\");\r\n console.log(\"╚════════════════════════════════════════╝\\n\");\r\n } catch (error) {\r\n console.error(\"\\n✗ Test failed:\", error);\r\n process.exit(1);\r\n }\r\n}\r\n\r\nrunAllTests();\r\n"],"mappings":"AAAA,SAAS,cAAc,SAAS,uBAAuB;AAIvD,eAAe,sBAAsB;AACnC,UAAQ,IAAI,qCAAqC;AAEjD,QAAM,UAAU;AAAA;AAAA;AAAA;AAKhB,QAAM,SAAS,MAAM,gBAAgB,SAAS;AAAA,IAC5C,aAAa;AAAA,IACb,cAAc;AAAA,IACd,OAAO;AAAA,IACP,SAAS;AAAA,EACX,CAAC;AAED,UAAQ,IAAI,YAAY;AACxB,UAAQ,IAAI,OAAO;AACnB,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,MAAM;AAGlB,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI;AACtC,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,yBAAyB,MAAM,MAAM,EAAE;AAAA,EACzD;AAEA,QAAM,cAAc,KAAK,MAAM,MAAM,CAAC,CAAC;AACvC,MAAI,YAAY,SAAS,SAAS;AAChC,UAAM,IAAI,MAAM,4BAA4B,YAAY,IAAI,EAAE;AAAA,EAChE;AAEA,UAAQ,IAAI,qCAAgC;AAC9C;AAEA,eAAe,mBAAmB;AAChC,UAAQ,IAAI,+BAA+B;AAE3C,QAAM,QAAQ,MAAM,aAAa,OAAO;AAAA,IACtC,aAAa;AAAA,IACb,cAAc;AAAA,IACd,OAAO;AAAA,EACT,CAAC;AAGD,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,YAAY;AACpD,QAAM,OAAO,IAAI,YAAY,EAAE,OAAO,YAAY;AAClD,QAAM,OAAO,IAAI,YAAY,EAAE,OAAO,UAAU;AAEhD,QAAM,OAAO,MAAM,KAAK,MAAM;AAC9B,QAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,QAAM,OAAO,MAAM,KAAK,IAAI;AAC5B,QAAM,QAAQ,MAAM,OAAO;AAE3B,QAAM,WAAW,IAAI;AAAA,IACnB,KAAK,SAAS,KAAK,SAAS,KAAK,SAAS,MAAM;AAAA,EAClD;AACA,WAAS,IAAI,MAAM,CAAC;AACpB,WAAS,IAAI,MAAM,KAAK,MAAM;AAC9B,WAAS,IAAI,MAAM,KAAK,SAAS,KAAK,MAAM;AAC5C,WAAS,IAAI,OAAO,KAAK,SAAS,KAAK,SAAS,KAAK,MAAM;AAE3D,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,QAAQ;AAChD,UAAQ,IAAI,mBAAmB;AAC/B,UAAQ,IAAI,MAAM;AAElB,UAAQ,IAAI,kCAA6B;AAC3C;AAEA,eAAe,mBAAmB;AAChC,UAAQ,IAAI,sCAAsC;AAElD,QAAM,aAAa;AAAA;AAAA;AAInB,QAAM,SAAS,MAAM,gBAAgB,YAAY;AAAA,IAC/C,aAAa;AAAA,IACb,cAAc;AAAA,IACd,OAAO;AAAA,EACT,CAAC;AAED,UAAQ,IAAI,eAAe;AAC3B,UAAQ,IAAI,UAAU;AACtB,UAAQ,IAAI,gBAAgB;AAC5B,UAAQ,IAAI,MAAM;AAGlB,QAAM,SAAS,KAAK,MAAM,MAAM;AAChC,MAAI,CAAC,MAAM,QAAQ,MAAM,GAAG;AAC1B,UAAM,IAAI,MAAM,qBAAqB;AAAA,EACvC;AACA,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,yBAAyB,OAAO,MAAM,EAAE;AAAA,EAC1D;AAEA,UAAQ,IAAI,mCAA8B;AAC5C;AAEA,eAAe,gBAAgB;AAC7B,UAAQ,IAAI,wCAAwC;AAEpD,QAAM,UAAU;AAAA;AAAA;AAAA;AAKhB,QAAM,SAAS,MAAM,gBAAgB,SAAS;AAAA,IAC5C,aAAa;AAAA,IACb,cAAc;AAAA,IACd,OAAO;AAAA,EACT,CAAC;AAED,UAAQ,IAAI,YAAY;AACxB,UAAQ,IAAI,OAAO;AACnB,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,MAAM;AAElB,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI;AACtC,QAAM,cAAc,KAAK,MAAM,MAAM,CAAC,CAAC;AAEvC,MAAI,CAAC,YAAY,YAAY,SAAS,GAAG,GAAG;AAC1C,UAAM,IAAI,MAAM,+CAA+C;AAAA,EACjE;AAEA,UAAQ,IAAI,+BAA0B;AACxC;AAEA,eAAe,YAAY;AACzB,UAAQ,IAAI,mCAAmC;AAE/C,QAAM,UAAU;AAAA;AAAA;AAAA;AAKhB,QAAM,SAAS,MAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,OAAO,GAAG;AAAA,IAC9D,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACX,CAAC;AAGD,UAAQ,IAAI,0BAAqB;AACnC;AAEA,eAAe,mBAAmB;AAChC,UAAQ,IAAI,uCAAuC;AAEnD,QAAM,QAAQ,MAAM,aAAa,OAAO;AAAA,IACtC,aAAa;AAAA,IACb,cAAc;AAAA,IACd,OAAO;AAAA,EACT,CAAC;AAGD,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,eAAe;AACvD,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,iBAAiB;AAEzD,QAAM,OAAO,MAAM,KAAK,MAAM;AAC9B,QAAM,OAAO,MAAM,KAAK,MAAM;AAC9B,QAAM,QAAQ,MAAM,OAAO;AAE3B,QAAM,WAAW,IAAI,WAAW,KAAK,SAAS,KAAK,SAAS,MAAM,MAAM;AACxE,WAAS,IAAI,MAAM,CAAC;AACpB,WAAS,IAAI,MAAM,KAAK,MAAM;AAC9B,WAAS,IAAI,OAAO,KAAK,SAAS,KAAK,MAAM;AAE7C,QAAM,SAAS,IAAI,YAAY,EAAE,OAAO,QAAQ;AAChD,UAAQ,IAAI,4BAA4B;AACxC,UAAQ,IAAI,MAAM;AAElB,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI;AACtC,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,yBAAyB,MAAM,MAAM,EAAE;AAAA,EACzD;AAEA,QAAM,cAAc,KAAK,MAAM,MAAM,CAAC,CAAC;AACvC,MAAI,YAAY,SAAS,SAAS;AAChC,UAAM,IAAI,MAAM,4BAA4B,YAAY,IAAI,EAAE;AAAA,EAChE;AAEA,UAAQ,IAAI,iCAA4B;AAC1C;AAEA,eAAe,mBAAmB;AAChC,UAAQ,IAAI,2CAA2C;AAGvD,QAAM,OAAO;AACb,MAAI,MAAM;AACV,WAAS,IAAI,GAAG,IAAI,MAAM,KAAK;AAC7B,WAAO,GAAG,CAAC,SAAS,CAAC,IAAI,IAAI,GAAG;AAAA;AAAA,EAClC;AAEA,QAAM,QAAQ,YAAY,IAAI;AAC9B,QAAM,SAAS,MAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,GAAG,GAAG;AAAA,IAC1D,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACX,CAAC;AACD,QAAM,MAAM,YAAY,IAAI;AAE5B,QAAM,QAAQ,IAAI,YAAY,EAAE,OAAO,MAAM,EAAE,KAAK,EAAE,MAAM,IAAI;AAEhE,UAAQ,IAAI,aAAa,IAAI,aAAa,MAAM,OAAO,QAAQ,CAAC,CAAC,IAAI;AACrE,UAAQ,IAAI,gBAAiB,IAAI,UAAU,OAAO,UAAW,MAAM,SAAS,MAAO,QAAQ,CAAC,CAAC,OAAO;AACpG,UAAQ,IAAI,iBAAiB,MAAM,MAAM,EAAE;AAE3C,MAAI,MAAM,WAAW,MAAM;AACzB,UAAM,IAAI,MAAM,YAAY,IAAI,eAAe,MAAM,MAAM,EAAE;AAAA,EAC/D;AAEA,UAAQ,IAAI,kCAA6B;AAC3C;AAEA,eAAe,yBAAyB;AACtC,UAAQ,IAAI,4CAA4C;AAExD,QAAM,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAOhB,QAAM,SAAS,MAAM,gBAAgB,SAAS;AAAA,IAC5C,aAAa;AAAA,IACb,cAAc;AAAA,IACd,OAAO;AAAA,EACT,CAAC;AAED,UAAQ,IAAI,+BAA+B;AAC3C,UAAQ,IAAI,KAAK,UAAU,OAAO,CAAC;AACnC,UAAQ,IAAI,kBAAkB;AAC9B,UAAQ,IAAI,MAAM;AAElB,QAAM,QAAQ,OAAO,KAAK,EAAE,MAAM,IAAI,EAAE,OAAO,OAAK,EAAE,SAAS,CAAC;AAChE,MAAI,MAAM,WAAW,GAAG;AACtB,UAAM,IAAI,MAAM,mCAAmC,MAAM,MAAM,EAAE;AAAA,EACnE;AAEA,UAAQ,IAAI,gCAA2B;AACzC;AAGA,eAAe,cAAc;AAC3B,UAAQ,IAAI,8PAA4C;AACxD,UAAQ,IAAI,qDAA2C;AACvD,UAAQ,IAAI,8PAA4C;AAExD,MAAI;AACF,UAAM,oBAAoB;AAC1B,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,UAAM,cAAc;AACpB,UAAM,UAAU;AAChB,UAAM,iBAAiB;AACvB,UAAM,iBAAiB;AACvB,UAAM,uBAAuB;AAE7B,YAAQ,IAAI,gQAA8C;AAC1D,YAAQ,IAAI,0DAA2C;AACvD,YAAQ,IAAI,gQAA8C;AAAA,EAC5D,SAAS,OAAO;AACd,YAAQ,MAAM,yBAAoB,KAAK;AACvC,YAAQ,KAAK,CAAC;AAAA,EAChB;AACF;AAEA,YAAY;","names":[]}
@@ -0,0 +1,52 @@
1
+ /* tslint:disable */
2
+ /* eslint-disable */
3
+ /**
4
+ * Detect CSV fields and delimiter from a sample of bytes.
5
+ */
6
+ export function detectCsvFields(sample: Uint8Array): any;
7
+ export function init(debug_enabled: boolean): void;
8
+ /**
9
+ * Detect the input format from a sample of bytes.
10
+ */
11
+ export function detectFormat(sample: Uint8Array): string | undefined;
12
+ /**
13
+ * A streaming converter state machine.
14
+ * Converts between CSV, NDJSON, JSON, and XML formats with high performance.
15
+ */
16
+ export class Converter {
17
+ free(): void;
18
+ /**
19
+ * Create a new converter with specific configuration
20
+ */
21
+ static withConfig(debug: boolean, input_format: string, output_format: string, chunk_target_bytes: number, enable_stats: boolean, csv_config: any, xml_config: any): Converter;
22
+ constructor(debug: boolean);
23
+ /**
24
+ * Push a chunk of bytes. Returns converted output bytes for that chunk.
25
+ */
26
+ push(chunk: Uint8Array): Uint8Array;
27
+ /**
28
+ * Finish the stream and return any remaining buffered output.
29
+ */
30
+ finish(): Uint8Array;
31
+ /**
32
+ * Get performance statistics
33
+ */
34
+ getStats(): Stats;
35
+ }
36
+ /**
37
+ * Performance statistics for the converter
38
+ */
39
+ export class Stats {
40
+ private constructor();
41
+ free(): void;
42
+ readonly parse_time_ms: number;
43
+ readonly write_time_ms: number;
44
+ readonly max_buffer_size: number;
45
+ readonly records_processed: number;
46
+ readonly transform_time_ms: number;
47
+ readonly current_partial_size: number;
48
+ readonly throughput_mb_per_sec: number;
49
+ readonly bytes_in: number;
50
+ readonly bytes_out: number;
51
+ readonly chunks_in: number;
52
+ }