rowpipe 2.2.1 → 2.10.2

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 (339) hide show
  1. package/README.md +34 -4
  2. package/dist/analytics/abtest.d.ts +39 -0
  3. package/dist/analytics/abtest.d.ts.map +1 -0
  4. package/dist/analytics/abtest.js +266 -0
  5. package/dist/analytics/abtest.js.map +1 -0
  6. package/dist/analytics/cluster.d.ts +25 -0
  7. package/dist/analytics/cluster.d.ts.map +1 -0
  8. package/dist/analytics/cluster.js +212 -0
  9. package/dist/analytics/cluster.js.map +1 -0
  10. package/dist/analytics/cohort.d.ts +22 -0
  11. package/dist/analytics/cohort.d.ts.map +1 -0
  12. package/dist/analytics/cohort.js +170 -0
  13. package/dist/analytics/cohort.js.map +1 -0
  14. package/dist/analytics/correlation.d.ts +15 -0
  15. package/dist/analytics/correlation.d.ts.map +1 -0
  16. package/dist/analytics/correlation.js +116 -0
  17. package/dist/analytics/correlation.js.map +1 -0
  18. package/dist/analytics/crosstab.d.ts +27 -0
  19. package/dist/analytics/crosstab.d.ts.map +1 -0
  20. package/dist/analytics/crosstab.js +90 -0
  21. package/dist/analytics/crosstab.js.map +1 -0
  22. package/dist/analytics/entropy.d.ts +23 -0
  23. package/dist/analytics/entropy.d.ts.map +1 -0
  24. package/dist/analytics/entropy.js +180 -0
  25. package/dist/analytics/entropy.js.map +1 -0
  26. package/dist/analytics/funnel.d.ts +29 -0
  27. package/dist/analytics/funnel.d.ts.map +1 -0
  28. package/dist/analytics/funnel.js +170 -0
  29. package/dist/analytics/funnel.js.map +1 -0
  30. package/dist/analytics/ngrams.d.ts +25 -0
  31. package/dist/analytics/ngrams.d.ts.map +1 -0
  32. package/dist/analytics/ngrams.js +110 -0
  33. package/dist/analytics/ngrams.js.map +1 -0
  34. package/dist/analytics/outliers.d.ts +25 -0
  35. package/dist/analytics/outliers.d.ts.map +1 -0
  36. package/dist/analytics/outliers.js +114 -0
  37. package/dist/analytics/outliers.js.map +1 -0
  38. package/dist/analytics/pareto.d.ts +36 -0
  39. package/dist/analytics/pareto.d.ts.map +1 -0
  40. package/dist/analytics/pareto.js +140 -0
  41. package/dist/analytics/pareto.js.map +1 -0
  42. package/dist/analytics/quantiles.d.ts +18 -0
  43. package/dist/analytics/quantiles.d.ts.map +1 -0
  44. package/dist/analytics/quantiles.js +62 -0
  45. package/dist/analytics/quantiles.js.map +1 -0
  46. package/dist/analytics/regression.d.ts +18 -0
  47. package/dist/analytics/regression.d.ts.map +1 -0
  48. package/dist/analytics/regression.js +79 -0
  49. package/dist/analytics/regression.js.map +1 -0
  50. package/dist/analytics/rfm.d.ts +41 -0
  51. package/dist/analytics/rfm.d.ts.map +1 -0
  52. package/dist/analytics/rfm.js +221 -0
  53. package/dist/analytics/rfm.js.map +1 -0
  54. package/dist/analytics/stats.d.ts.map +1 -1
  55. package/dist/analytics/stats.js +65 -15
  56. package/dist/analytics/stats.js.map +1 -1
  57. package/dist/analytics/technical.d.ts +19 -0
  58. package/dist/analytics/technical.d.ts.map +1 -0
  59. package/dist/analytics/technical.js +365 -0
  60. package/dist/analytics/technical.js.map +1 -0
  61. package/dist/cli/commands/abtest.d.ts +10 -0
  62. package/dist/cli/commands/abtest.d.ts.map +1 -0
  63. package/dist/cli/commands/abtest.js +68 -0
  64. package/dist/cli/commands/abtest.js.map +1 -0
  65. package/dist/cli/commands/cluster.d.ts +9 -0
  66. package/dist/cli/commands/cluster.d.ts.map +1 -0
  67. package/dist/cli/commands/cluster.js +77 -0
  68. package/dist/cli/commands/cluster.js.map +1 -0
  69. package/dist/cli/commands/cohort.d.ts +10 -0
  70. package/dist/cli/commands/cohort.d.ts.map +1 -0
  71. package/dist/cli/commands/cohort.js +66 -0
  72. package/dist/cli/commands/cohort.js.map +1 -0
  73. package/dist/cli/commands/completion.d.ts +5 -0
  74. package/dist/cli/commands/completion.d.ts.map +1 -0
  75. package/dist/cli/commands/completion.js +7 -0
  76. package/dist/cli/commands/completion.js.map +1 -0
  77. package/dist/cli/commands/concat.d.ts +9 -0
  78. package/dist/cli/commands/concat.d.ts.map +1 -0
  79. package/dist/cli/commands/concat.js +62 -0
  80. package/dist/cli/commands/concat.js.map +1 -0
  81. package/dist/cli/commands/convert.d.ts +2 -0
  82. package/dist/cli/commands/convert.d.ts.map +1 -1
  83. package/dist/cli/commands/convert.js.map +1 -1
  84. package/dist/cli/commands/corr.d.ts +7 -0
  85. package/dist/cli/commands/corr.d.ts.map +1 -0
  86. package/dist/cli/commands/corr.js +70 -0
  87. package/dist/cli/commands/corr.js.map +1 -0
  88. package/dist/cli/commands/crosstab.d.ts +11 -0
  89. package/dist/cli/commands/crosstab.d.ts.map +1 -0
  90. package/dist/cli/commands/crosstab.js +71 -0
  91. package/dist/cli/commands/crosstab.js.map +1 -0
  92. package/dist/cli/commands/entropy.d.ts +9 -0
  93. package/dist/cli/commands/entropy.d.ts.map +1 -0
  94. package/dist/cli/commands/entropy.js +71 -0
  95. package/dist/cli/commands/entropy.js.map +1 -0
  96. package/dist/cli/commands/explode.d.ts +8 -0
  97. package/dist/cli/commands/explode.d.ts.map +1 -0
  98. package/dist/cli/commands/explode.js +61 -0
  99. package/dist/cli/commands/explode.js.map +1 -0
  100. package/dist/cli/commands/fetch.d.ts +8 -0
  101. package/dist/cli/commands/fetch.d.ts.map +1 -0
  102. package/dist/cli/commands/fetch.js +41 -0
  103. package/dist/cli/commands/fetch.js.map +1 -0
  104. package/dist/cli/commands/files.d.ts +1 -1
  105. package/dist/cli/commands/files.d.ts.map +1 -1
  106. package/dist/cli/commands/flatten.d.ts +8 -0
  107. package/dist/cli/commands/flatten.d.ts.map +1 -0
  108. package/dist/cli/commands/flatten.js +57 -0
  109. package/dist/cli/commands/flatten.js.map +1 -0
  110. package/dist/cli/commands/freq.d.ts +10 -0
  111. package/dist/cli/commands/freq.d.ts.map +1 -0
  112. package/dist/cli/commands/freq.js +122 -0
  113. package/dist/cli/commands/freq.js.map +1 -0
  114. package/dist/cli/commands/funnel.d.ts +11 -0
  115. package/dist/cli/commands/funnel.d.ts.map +1 -0
  116. package/dist/cli/commands/funnel.js +69 -0
  117. package/dist/cli/commands/funnel.js.map +1 -0
  118. package/dist/cli/commands/fuzzy-join.d.ts +25 -0
  119. package/dist/cli/commands/fuzzy-join.d.ts.map +1 -0
  120. package/dist/cli/commands/fuzzy-join.js +85 -0
  121. package/dist/cli/commands/fuzzy-join.js.map +1 -0
  122. package/dist/cli/commands/generate.d.ts +8 -0
  123. package/dist/cli/commands/generate.d.ts.map +1 -0
  124. package/dist/cli/commands/generate.js +34 -0
  125. package/dist/cli/commands/generate.js.map +1 -0
  126. package/dist/cli/commands/mask.d.ts +6 -0
  127. package/dist/cli/commands/mask.d.ts.map +1 -0
  128. package/dist/cli/commands/mask.js +58 -0
  129. package/dist/cli/commands/mask.js.map +1 -0
  130. package/dist/cli/commands/ngrams.d.ts +11 -0
  131. package/dist/cli/commands/ngrams.d.ts.map +1 -0
  132. package/dist/cli/commands/ngrams.js +70 -0
  133. package/dist/cli/commands/ngrams.js.map +1 -0
  134. package/dist/cli/commands/outliers.d.ts +13 -0
  135. package/dist/cli/commands/outliers.d.ts.map +1 -0
  136. package/dist/cli/commands/outliers.js +58 -0
  137. package/dist/cli/commands/outliers.js.map +1 -0
  138. package/dist/cli/commands/pareto.d.ts +8 -0
  139. package/dist/cli/commands/pareto.d.ts.map +1 -0
  140. package/dist/cli/commands/pareto.js +80 -0
  141. package/dist/cli/commands/pareto.js.map +1 -0
  142. package/dist/cli/commands/partition.d.ts +8 -0
  143. package/dist/cli/commands/partition.d.ts.map +1 -0
  144. package/dist/cli/commands/partition.js +44 -0
  145. package/dist/cli/commands/partition.js.map +1 -0
  146. package/dist/cli/commands/pipeline.d.ts +6 -0
  147. package/dist/cli/commands/pipeline.d.ts.map +1 -1
  148. package/dist/cli/commands/pipeline.js +22 -0
  149. package/dist/cli/commands/pipeline.js.map +1 -1
  150. package/dist/cli/commands/pivot.d.ts +11 -0
  151. package/dist/cli/commands/pivot.d.ts.map +1 -0
  152. package/dist/cli/commands/pivot.js +58 -0
  153. package/dist/cli/commands/pivot.js.map +1 -0
  154. package/dist/cli/commands/plot.d.ts +12 -0
  155. package/dist/cli/commands/plot.d.ts.map +1 -0
  156. package/dist/cli/commands/plot.js +123 -0
  157. package/dist/cli/commands/plot.js.map +1 -0
  158. package/dist/cli/commands/quantiles.d.ts +7 -0
  159. package/dist/cli/commands/quantiles.d.ts.map +1 -0
  160. package/dist/cli/commands/quantiles.js +94 -0
  161. package/dist/cli/commands/quantiles.js.map +1 -0
  162. package/dist/cli/commands/regression.d.ts +7 -0
  163. package/dist/cli/commands/regression.d.ts.map +1 -0
  164. package/dist/cli/commands/regression.js +86 -0
  165. package/dist/cli/commands/regression.js.map +1 -0
  166. package/dist/cli/commands/report.d.ts +8 -0
  167. package/dist/cli/commands/report.d.ts.map +1 -0
  168. package/dist/cli/commands/report.js +36 -0
  169. package/dist/cli/commands/report.js.map +1 -0
  170. package/dist/cli/commands/rfm.d.ts +11 -0
  171. package/dist/cli/commands/rfm.d.ts.map +1 -0
  172. package/dist/cli/commands/rfm.js +78 -0
  173. package/dist/cli/commands/rfm.js.map +1 -0
  174. package/dist/cli/commands/serve.d.ts +7 -0
  175. package/dist/cli/commands/serve.d.ts.map +1 -0
  176. package/dist/cli/commands/serve.js +43 -0
  177. package/dist/cli/commands/serve.js.map +1 -0
  178. package/dist/cli/commands/split.d.ts +8 -0
  179. package/dist/cli/commands/split.d.ts.map +1 -0
  180. package/dist/cli/commands/split.js +43 -0
  181. package/dist/cli/commands/split.js.map +1 -0
  182. package/dist/cli/commands/table.d.ts +9 -0
  183. package/dist/cli/commands/table.d.ts.map +1 -0
  184. package/dist/cli/commands/table.js +9 -0
  185. package/dist/cli/commands/table.js.map +1 -0
  186. package/dist/cli/commands/technical.d.ts +8 -0
  187. package/dist/cli/commands/technical.d.ts.map +1 -0
  188. package/dist/cli/commands/technical.js +54 -0
  189. package/dist/cli/commands/technical.js.map +1 -0
  190. package/dist/cli/commands/test.d.ts +7 -0
  191. package/dist/cli/commands/test.d.ts.map +1 -0
  192. package/dist/cli/commands/test.js +53 -0
  193. package/dist/cli/commands/test.js.map +1 -0
  194. package/dist/cli/commands/timeseries.d.ts +11 -0
  195. package/dist/cli/commands/timeseries.d.ts.map +1 -0
  196. package/dist/cli/commands/timeseries.js +82 -0
  197. package/dist/cli/commands/timeseries.js.map +1 -0
  198. package/dist/cli/commands/unpivot.d.ts +12 -0
  199. package/dist/cli/commands/unpivot.d.ts.map +1 -0
  200. package/dist/cli/commands/unpivot.js +59 -0
  201. package/dist/cli/commands/unpivot.js.map +1 -0
  202. package/dist/cli/completion.d.ts +5 -0
  203. package/dist/cli/completion.d.ts.map +1 -0
  204. package/dist/cli/completion.js +194 -0
  205. package/dist/cli/completion.js.map +1 -0
  206. package/dist/cli/index.js +816 -15
  207. package/dist/cli/index.js.map +1 -1
  208. package/dist/core/error-handler.d.ts +38 -0
  209. package/dist/core/error-handler.d.ts.map +1 -0
  210. package/dist/core/error-handler.js +81 -0
  211. package/dist/core/error-handler.js.map +1 -0
  212. package/dist/core/pipeline.d.ts +10 -0
  213. package/dist/core/pipeline.d.ts.map +1 -1
  214. package/dist/core/pipeline.js +14 -0
  215. package/dist/core/pipeline.js.map +1 -1
  216. package/dist/core/types.d.ts +4 -0
  217. package/dist/core/types.d.ts.map +1 -1
  218. package/dist/dataops/fetch.d.ts +27 -0
  219. package/dist/dataops/fetch.d.ts.map +1 -0
  220. package/dist/dataops/fetch.js +150 -0
  221. package/dist/dataops/fetch.js.map +1 -0
  222. package/dist/dataops/generate.d.ts +16 -0
  223. package/dist/dataops/generate.d.ts.map +1 -0
  224. package/dist/dataops/generate.js +201 -0
  225. package/dist/dataops/generate.js.map +1 -0
  226. package/dist/dataops/mask.d.ts +25 -0
  227. package/dist/dataops/mask.d.ts.map +1 -0
  228. package/dist/dataops/mask.js +133 -0
  229. package/dist/dataops/mask.js.map +1 -0
  230. package/dist/dataops/report.d.ts +7 -0
  231. package/dist/dataops/report.d.ts.map +1 -0
  232. package/dist/dataops/report.js +139 -0
  233. package/dist/dataops/report.js.map +1 -0
  234. package/dist/dataops/server.d.ts +10 -0
  235. package/dist/dataops/server.d.ts.map +1 -0
  236. package/dist/dataops/server.js +137 -0
  237. package/dist/dataops/server.js.map +1 -0
  238. package/dist/dataops/test-runner.d.ts +34 -0
  239. package/dist/dataops/test-runner.d.ts.map +1 -0
  240. package/dist/dataops/test-runner.js +128 -0
  241. package/dist/dataops/test-runner.js.map +1 -0
  242. package/dist/db/adapters/sqlite.d.ts.map +1 -1
  243. package/dist/db/adapters/sqlite.js +4 -1
  244. package/dist/db/adapters/sqlite.js.map +1 -1
  245. package/dist/diff/engine.d.ts.map +1 -1
  246. package/dist/diff/engine.js +73 -16
  247. package/dist/diff/engine.js.map +1 -1
  248. package/dist/diff/storage/disk-index.d.ts +10 -1
  249. package/dist/diff/storage/disk-index.d.ts.map +1 -1
  250. package/dist/diff/storage/disk-index.js +95 -13
  251. package/dist/diff/storage/disk-index.js.map +1 -1
  252. package/dist/files/hash.d.ts +9 -2
  253. package/dist/files/hash.d.ts.map +1 -1
  254. package/dist/files/hash.js +9 -10
  255. package/dist/files/hash.js.map +1 -1
  256. package/dist/files/reader.d.ts.map +1 -1
  257. package/dist/files/reader.js +17 -10
  258. package/dist/files/reader.js.map +1 -1
  259. package/dist/files/types.d.ts +2 -1
  260. package/dist/files/types.d.ts.map +1 -1
  261. package/dist/index.d.ts +65 -1
  262. package/dist/index.d.ts.map +1 -1
  263. package/dist/index.js +66 -1
  264. package/dist/index.js.map +1 -1
  265. package/dist/planner/executor.d.ts.map +1 -1
  266. package/dist/planner/executor.js +17 -0
  267. package/dist/planner/executor.js.map +1 -1
  268. package/dist/planner/types.d.ts +11 -0
  269. package/dist/planner/types.d.ts.map +1 -1
  270. package/dist/readers/csv.d.ts.map +1 -1
  271. package/dist/readers/csv.js +206 -164
  272. package/dist/readers/csv.js.map +1 -1
  273. package/dist/readers/json.d.ts.map +1 -1
  274. package/dist/readers/json.js +145 -121
  275. package/dist/readers/json.js.map +1 -1
  276. package/dist/readers/jsonl.d.ts.map +1 -1
  277. package/dist/readers/jsonl.js +51 -31
  278. package/dist/readers/jsonl.js.map +1 -1
  279. package/dist/transforms/concat.d.ts +26 -0
  280. package/dist/transforms/concat.d.ts.map +1 -0
  281. package/dist/transforms/concat.js +57 -0
  282. package/dist/transforms/concat.js.map +1 -0
  283. package/dist/transforms/explode.d.ts +14 -0
  284. package/dist/transforms/explode.d.ts.map +1 -0
  285. package/dist/transforms/explode.js +81 -0
  286. package/dist/transforms/explode.js.map +1 -0
  287. package/dist/transforms/flatten.d.ts +12 -0
  288. package/dist/transforms/flatten.d.ts.map +1 -0
  289. package/dist/transforms/flatten.js +65 -0
  290. package/dist/transforms/flatten.js.map +1 -0
  291. package/dist/transforms/fuzzy-join.d.ts +53 -0
  292. package/dist/transforms/fuzzy-join.d.ts.map +1 -0
  293. package/dist/transforms/fuzzy-join.js +347 -0
  294. package/dist/transforms/fuzzy-join.js.map +1 -0
  295. package/dist/transforms/jit-compiler.d.ts.map +1 -1
  296. package/dist/transforms/jit-compiler.js +103 -14
  297. package/dist/transforms/jit-compiler.js.map +1 -1
  298. package/dist/transforms/map.d.ts +6 -2
  299. package/dist/transforms/map.d.ts.map +1 -1
  300. package/dist/transforms/map.js +64 -26
  301. package/dist/transforms/map.js.map +1 -1
  302. package/dist/transforms/partition.d.ts +35 -0
  303. package/dist/transforms/partition.d.ts.map +1 -0
  304. package/dist/transforms/partition.js +150 -0
  305. package/dist/transforms/partition.js.map +1 -0
  306. package/dist/transforms/pivot.d.ts +16 -0
  307. package/dist/transforms/pivot.d.ts.map +1 -0
  308. package/dist/transforms/pivot.js +194 -0
  309. package/dist/transforms/pivot.js.map +1 -0
  310. package/dist/transforms/sort/comparator.d.ts.map +1 -1
  311. package/dist/transforms/sort/comparator.js +153 -24
  312. package/dist/transforms/sort/comparator.js.map +1 -1
  313. package/dist/transforms/sort/external-sort.js +1 -1
  314. package/dist/transforms/sort/external-sort.js.map +1 -1
  315. package/dist/transforms/split.d.ts +17 -0
  316. package/dist/transforms/split.d.ts.map +1 -0
  317. package/dist/transforms/split.js +88 -0
  318. package/dist/transforms/split.js.map +1 -0
  319. package/dist/transforms/timeseries.d.ts +42 -0
  320. package/dist/transforms/timeseries.d.ts.map +1 -0
  321. package/dist/transforms/timeseries.js +276 -0
  322. package/dist/transforms/timeseries.js.map +1 -0
  323. package/dist/transforms/unpivot.d.ts +14 -0
  324. package/dist/transforms/unpivot.d.ts.map +1 -0
  325. package/dist/transforms/unpivot.js +56 -0
  326. package/dist/transforms/unpivot.js.map +1 -0
  327. package/dist/ui/chart.d.ts +30 -0
  328. package/dist/ui/chart.d.ts.map +1 -0
  329. package/dist/ui/chart.js +91 -0
  330. package/dist/ui/chart.js.map +1 -0
  331. package/dist/writers/index.d.ts +1 -0
  332. package/dist/writers/index.d.ts.map +1 -1
  333. package/dist/writers/index.js +10 -0
  334. package/dist/writers/index.js.map +1 -1
  335. package/dist/writers/table.d.ts +23 -0
  336. package/dist/writers/table.d.ts.map +1 -0
  337. package/dist/writers/table.js +156 -0
  338. package/dist/writers/table.js.map +1 -0
  339. package/package.json +6 -3
@@ -1,5 +1,6 @@
1
1
  import { openDecompressedReadStream } from "../utils/compression.js";
2
2
  import { ParseError } from "../core/errors.js";
3
+ import { RowErrorHandler } from "../core/error-handler.js";
3
4
  /**
4
5
  * Incremental streaming JSON parser for top-level arrays [ {...}, ... ]
5
6
  * and nested array paths (e.g. data.results).
@@ -26,6 +27,11 @@ export class JSONReader {
26
27
  const batchSize = Math.max(1, mergedOptions.batchSize ?? 1000);
27
28
  const targetPath = mergedOptions.path ?? "";
28
29
  const stream = this.getInputStream(mergedOptions);
30
+ const errorHandler = new RowErrorHandler({
31
+ strategy: mergedOptions.onError,
32
+ badRowsLog: mergedOptions.badRowsLog,
33
+ sourceFile: mergedOptions.filePath,
34
+ });
29
35
  let buffer = "";
30
36
  let cursor = 0;
31
37
  let byteOffset = 0;
@@ -42,154 +48,172 @@ export class JSONReader {
42
48
  let rowIndex = 0;
43
49
  // Helper for path navigation if targetPath is set
44
50
  const targetPathParts = targetPath ? targetPath.split(".") : [];
45
- for await (const chunk of stream) {
46
- const chunkStr = typeof chunk === "string" ? chunk : chunk.toString("utf8");
47
- buffer += chunkStr;
48
- while (cursor < buffer.length) {
49
- const char = buffer[cursor];
50
- if (isEscaped) {
51
- isEscaped = false;
52
- cursor++;
53
- byteOffset++;
54
- continue;
55
- }
56
- if (char === "\\") {
57
- isEscaped = true;
58
- cursor++;
59
- byteOffset++;
60
- continue;
61
- }
62
- if (char === '"') {
63
- inString = !inString;
64
- cursor++;
65
- byteOffset++;
66
- continue;
67
- }
68
- if (inString) {
69
- cursor++;
70
- byteOffset++;
71
- continue;
72
- }
73
- // We are outside of any string literal
74
- if (!foundTargetArray) {
75
- // If we need to find target path (e.g. data.results)
76
- // Look for keys and match path parts
77
- if (char === "{") {
51
+ try {
52
+ for await (const chunk of stream) {
53
+ const chunkStr = typeof chunk === "string" ? chunk : chunk.toString("utf8");
54
+ buffer += chunkStr;
55
+ while (cursor < buffer.length) {
56
+ const char = buffer[cursor];
57
+ if (isEscaped) {
58
+ isEscaped = false;
78
59
  cursor++;
79
60
  byteOffset++;
80
61
  continue;
81
62
  }
82
- else if (char === "[") {
83
- // Check if current path matches targetPath
84
- // If path matched or we hit array at root
85
- foundTargetArray = true;
86
- inArray = true;
63
+ if (char === "\\") {
64
+ isEscaped = true;
87
65
  cursor++;
88
66
  byteOffset++;
89
67
  continue;
90
68
  }
91
- else if (char === ":") {
92
- // Scan backwards from ':' to find previous string key
93
- let keyEnd = cursor - 1;
94
- while (keyEnd >= 0 && /\s/.test(buffer[keyEnd]))
95
- keyEnd--;
96
- if (keyEnd >= 0 && buffer[keyEnd] === '"') {
97
- let keyStart = keyEnd - 1;
98
- while (keyStart >= 0 && buffer[keyStart] !== '"')
99
- keyStart--;
100
- if (keyStart >= 0) {
101
- const keyName = buffer.slice(keyStart + 1, keyEnd);
102
- currentPath.push(keyName);
103
- if (currentPath.join(".") === targetPath ||
104
- keyName === targetPathParts[targetPathParts.length - 1]) {
105
- // Next non-whitespace should be '['
106
- // Let it continue to find '['
107
- }
108
- }
109
- }
69
+ if (char === '"') {
70
+ inString = !inString;
110
71
  cursor++;
111
72
  byteOffset++;
112
73
  continue;
113
74
  }
114
- cursor++;
115
- byteOffset++;
116
- continue;
117
- }
118
- // Now we are streaming inside the target array
119
- if (!inArray) {
120
- if (char === "[") {
121
- inArray = true;
75
+ if (inString) {
122
76
  cursor++;
123
77
  byteOffset++;
124
78
  continue;
125
79
  }
126
- }
127
- else {
128
- // Inside array: looking for objects '{ ... }'
129
- if (char === "{") {
130
- if (objectDepth === 0) {
131
- objectStartIndex = cursor;
80
+ // We are outside of any string literal
81
+ if (!foundTargetArray) {
82
+ // If we need to find target path (e.g. data.results)
83
+ // Look for keys and match path parts
84
+ if (char === "{") {
85
+ cursor++;
86
+ byteOffset++;
87
+ continue;
132
88
  }
133
- objectDepth++;
134
- }
135
- else if (char === "}") {
136
- objectDepth--;
137
- if (objectDepth === 0 && objectStartIndex !== -1) {
138
- // We have captured a complete JSON object!
139
- const objectStr = buffer.slice(objectStartIndex, cursor + 1);
140
- let parsedRow;
141
- try {
142
- parsedRow = JSON.parse(objectStr);
89
+ else if (char === "[") {
90
+ // Check if current path matches targetPath
91
+ // If path matched or we hit array at root
92
+ foundTargetArray = true;
93
+ inArray = true;
94
+ cursor++;
95
+ byteOffset++;
96
+ continue;
97
+ }
98
+ else if (char === ":") {
99
+ // Scan backwards from ':' to find previous string key
100
+ let keyEnd = cursor - 1;
101
+ while (keyEnd >= 0 && /\s/.test(buffer[keyEnd]))
102
+ keyEnd--;
103
+ if (keyEnd >= 0 && buffer[keyEnd] === '"') {
104
+ let keyStart = keyEnd - 1;
105
+ while (keyStart >= 0 && buffer[keyStart] !== '"')
106
+ keyStart--;
107
+ if (keyStart >= 0) {
108
+ const keyName = buffer.slice(keyStart + 1, keyEnd);
109
+ currentPath.push(keyName);
110
+ if (currentPath.join(".") === targetPath ||
111
+ keyName === targetPathParts[targetPathParts.length - 1]) {
112
+ // Next non-whitespace should be '['
113
+ // Let it continue to find '['
114
+ }
115
+ }
143
116
  }
144
- catch (err) {
145
- throw new ParseError(`Malformed JSON object in array: ${err.message}`, {
146
- file: mergedOptions.filePath,
147
- row: rowIndex + 1,
148
- byteOffset,
149
- });
117
+ cursor++;
118
+ byteOffset++;
119
+ continue;
120
+ }
121
+ cursor++;
122
+ byteOffset++;
123
+ continue;
124
+ }
125
+ // Now we are streaming inside the target array
126
+ if (!inArray) {
127
+ if (char === "[") {
128
+ inArray = true;
129
+ cursor++;
130
+ byteOffset++;
131
+ continue;
132
+ }
133
+ }
134
+ else {
135
+ // Inside array: looking for objects '{ ... }'
136
+ if (char === "{") {
137
+ if (objectDepth === 0) {
138
+ objectStartIndex = cursor;
150
139
  }
151
- if (typeof parsedRow === "object" &&
152
- parsedRow !== null &&
153
- !Array.isArray(parsedRow)) {
154
- rowsInCurrentBatch.push(parsedRow);
155
- rowIndex++;
156
- if (rowsInCurrentBatch.length >= batchSize) {
157
- yield {
158
- rows: rowsInCurrentBatch,
159
- offset: globalOffset,
160
- };
161
- globalOffset += rowsInCurrentBatch.length;
162
- rowsInCurrentBatch = [];
140
+ objectDepth++;
141
+ }
142
+ else if (char === "}") {
143
+ objectDepth--;
144
+ if (objectDepth === 0 && objectStartIndex !== -1) {
145
+ // We have captured a complete JSON object!
146
+ const objectStr = buffer.slice(objectStartIndex, cursor + 1);
147
+ let parsedRow;
148
+ try {
149
+ parsedRow = JSON.parse(objectStr);
150
+ }
151
+ catch (err) {
152
+ const parseErr = new ParseError(`Malformed JSON object in array: ${err.message}`, {
153
+ file: mergedOptions.filePath,
154
+ row: rowIndex + 1,
155
+ byteOffset,
156
+ });
157
+ errorHandler.handle(parseErr, {
158
+ file: mergedOptions.filePath,
159
+ row: rowIndex + 1,
160
+ byteOffset,
161
+ raw: objectStr,
162
+ });
163
+ if (mergedOptions.onParseError) {
164
+ mergedOptions.onParseError(err, objectStr);
165
+ }
166
+ objectStartIndex = -1;
167
+ cursor++;
168
+ byteOffset++;
169
+ continue;
163
170
  }
171
+ if (typeof parsedRow === "object" &&
172
+ parsedRow !== null &&
173
+ !Array.isArray(parsedRow)) {
174
+ rowsInCurrentBatch.push(parsedRow);
175
+ rowIndex++;
176
+ if (rowsInCurrentBatch.length >= batchSize) {
177
+ yield {
178
+ rows: rowsInCurrentBatch,
179
+ offset: globalOffset,
180
+ };
181
+ globalOffset += rowsInCurrentBatch.length;
182
+ rowsInCurrentBatch = [];
183
+ }
184
+ }
185
+ objectStartIndex = -1;
164
186
  }
165
- objectStartIndex = -1;
166
187
  }
188
+ else if (char === "]" && objectDepth === 0) {
189
+ // End of array reached
190
+ inArray = false;
191
+ break;
192
+ }
193
+ cursor++;
194
+ byteOffset++;
167
195
  }
168
- else if (char === "]" && objectDepth === 0) {
169
- // End of array reached
170
- inArray = false;
171
- break;
172
- }
173
- cursor++;
174
- byteOffset++;
196
+ }
197
+ // Compact buffer while preserving active object if in the middle of parsing
198
+ if (objectStartIndex !== -1) {
199
+ buffer = buffer.slice(objectStartIndex);
200
+ cursor = cursor - objectStartIndex;
201
+ objectStartIndex = 0;
202
+ }
203
+ else {
204
+ buffer = buffer.slice(cursor);
205
+ cursor = 0;
175
206
  }
176
207
  }
177
- // Compact buffer while preserving active object if in the middle of parsing
178
- if (objectStartIndex !== -1) {
179
- buffer = buffer.slice(objectStartIndex);
180
- cursor = cursor - objectStartIndex;
181
- objectStartIndex = 0;
182
- }
183
- else {
184
- buffer = buffer.slice(cursor);
185
- cursor = 0;
208
+ if (rowsInCurrentBatch.length > 0) {
209
+ yield {
210
+ rows: rowsInCurrentBatch,
211
+ offset: globalOffset,
212
+ };
186
213
  }
187
214
  }
188
- if (rowsInCurrentBatch.length > 0) {
189
- yield {
190
- rows: rowsInCurrentBatch,
191
- offset: globalOffset,
192
- };
215
+ finally {
216
+ errorHandler.close();
193
217
  }
194
218
  }
195
219
  async inspect(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/readers/json.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"json.js","sourceRoot":"","sources":["../../src/readers/json.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/readers/jsonl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAE5C,OAAO,KAAK,EAEV,UAAU,EACV,kBAAkB,EAClB,aAAa,EAEb,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAY,YAAW,aAAa;IAC/C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,OAAO,CAAqB;gBAExB,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAO,GAAE,kBAAuB;IAQtE,OAAO,CAAC,cAAc;IAIf,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU;IAmE1C,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsBpE"}
1
+ {"version":3,"file":"jsonl.d.ts","sourceRoot":"","sources":["../../src/readers/jsonl.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EAEV,UAAU,EACV,kBAAkB,EAClB,aAAa,EAEb,aAAa,EACd,MAAM,kBAAkB,CAAC;AAE1B,MAAM,WAAW,kBAAmB,SAAQ,aAAa;IACvD,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,WAAY,YAAW,aAAa;IAC/C,OAAO,CAAC,KAAK,CAAoB;IACjC,OAAO,CAAC,OAAO,CAAqB;gBAExB,KAAK,EAAE,QAAQ,GAAG,MAAM,EAAE,OAAO,GAAE,kBAAuB;IAQtE,OAAO,CAAC,cAAc;IAIf,IAAI,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,UAAU;IAsF1C,OAAO,CAAC,OAAO,CAAC,EAAE,aAAa,GAAG,OAAO,CAAC,kBAAkB,CAAC;CAsBpE"}
@@ -1,6 +1,7 @@
1
1
  import { openDecompressedReadStream } from "../utils/compression.js";
2
2
  import { createInterface } from "node:readline";
3
3
  import { ParseError } from "../core/errors.js";
4
+ import { RowErrorHandler } from "../core/error-handler.js";
4
5
  export class JSONLReader {
5
6
  input;
6
7
  options;
@@ -25,47 +26,66 @@ export class JSONLReader {
25
26
  input: stream,
26
27
  crlfDelay: Infinity,
27
28
  });
29
+ const errorHandler = new RowErrorHandler({
30
+ strategy: mergedOptions.onError,
31
+ badRowsLog: mergedOptions.badRowsLog,
32
+ sourceFile: mergedOptions.filePath,
33
+ });
28
34
  let lineNumber = 0;
29
35
  let rowsInCurrentBatch = [];
30
36
  let globalOffset = 0;
31
- for await (const line of rl) {
32
- lineNumber++;
33
- const trimmed = line.trim();
34
- if (!trimmed)
35
- continue;
36
- let parsed;
37
- try {
38
- parsed = JSON.parse(trimmed);
39
- }
40
- catch (err) {
41
- throw new ParseError(`Invalid JSON on line ${lineNumber}: ${err.message}`, {
42
- file: mergedOptions.filePath,
43
- line: lineNumber,
44
- row: lineNumber,
45
- });
46
- }
47
- if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
48
- throw new ParseError(`Expected JSON object on line ${lineNumber}, got ${Array.isArray(parsed) ? "array" : typeof parsed}`, {
49
- file: mergedOptions.filePath,
50
- line: lineNumber,
51
- row: lineNumber,
52
- });
37
+ try {
38
+ for await (const line of rl) {
39
+ lineNumber++;
40
+ const trimmed = line.trim();
41
+ if (!trimmed)
42
+ continue;
43
+ let parsed;
44
+ try {
45
+ parsed = JSON.parse(trimmed);
46
+ }
47
+ catch (err) {
48
+ errorHandler.handle(new ParseError(`Invalid JSON on line ${lineNumber}: ${err.message}`, {
49
+ file: mergedOptions.filePath,
50
+ line: lineNumber,
51
+ row: lineNumber,
52
+ }), { row: lineNumber, raw: trimmed, file: mergedOptions.filePath });
53
+ if (mergedOptions.onParseError) {
54
+ mergedOptions.onParseError(err, trimmed);
55
+ }
56
+ continue;
57
+ }
58
+ if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
59
+ const err = new ParseError(`Expected JSON object on line ${lineNumber}, got ${Array.isArray(parsed) ? "array" : typeof parsed}`, {
60
+ file: mergedOptions.filePath,
61
+ line: lineNumber,
62
+ row: lineNumber,
63
+ });
64
+ errorHandler.handle(err, { row: lineNumber, raw: trimmed, file: mergedOptions.filePath });
65
+ if (mergedOptions.onParseError) {
66
+ mergedOptions.onParseError(err, trimmed);
67
+ }
68
+ continue;
69
+ }
70
+ rowsInCurrentBatch.push(parsed);
71
+ if (rowsInCurrentBatch.length >= batchSize) {
72
+ yield {
73
+ rows: rowsInCurrentBatch,
74
+ offset: globalOffset,
75
+ };
76
+ globalOffset += rowsInCurrentBatch.length;
77
+ rowsInCurrentBatch = [];
78
+ }
53
79
  }
54
- rowsInCurrentBatch.push(parsed);
55
- if (rowsInCurrentBatch.length >= batchSize) {
80
+ if (rowsInCurrentBatch.length > 0) {
56
81
  yield {
57
82
  rows: rowsInCurrentBatch,
58
83
  offset: globalOffset,
59
84
  };
60
- globalOffset += rowsInCurrentBatch.length;
61
- rowsInCurrentBatch = [];
62
85
  }
63
86
  }
64
- if (rowsInCurrentBatch.length > 0) {
65
- yield {
66
- rows: rowsInCurrentBatch,
67
- offset: globalOffset,
68
- };
87
+ finally {
88
+ errorHandler.close();
69
89
  }
70
90
  }
71
91
  async inspect(options) {
@@ -1 +1 @@
1
- {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/readers/jsonl.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"jsonl.js","sourceRoot":"","sources":["../../src/readers/jsonl.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,26 @@
1
+ import type { DataStream, TabularReader } from "../core/types.js";
2
+ export interface ConcatSource {
3
+ reader: TabularReader;
4
+ label?: string;
5
+ }
6
+ export interface ConcatOptions {
7
+ sourceCol?: string;
8
+ align?: "union" | "intersect";
9
+ batchSize?: number;
10
+ }
11
+ /**
12
+ * Streaming concatenation reader that combines multiple TabularReaders sequentially
13
+ * into a single unified DataStream with zero extra memory overhead and optional source tagging.
14
+ */
15
+ export declare class ConcatReader implements TabularReader {
16
+ private sources;
17
+ private options;
18
+ constructor(sources: Array<TabularReader | ConcatSource>, options?: ConcatOptions);
19
+ read(): DataStream;
20
+ close(): Promise<void>;
21
+ }
22
+ /**
23
+ * Helper to concatenate multiple tabular readers with options.
24
+ */
25
+ export declare function concatReaders(sources: Array<TabularReader | ConcatSource>, options?: ConcatOptions): TabularReader;
26
+ //# sourceMappingURL=concat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concat.d.ts","sourceRoot":"","sources":["../../src/transforms/concat.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAa,UAAU,EAAO,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAGlF,MAAM,WAAW,YAAY;IAC3B,MAAM,EAAE,aAAa,CAAC;IACtB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,qBAAa,YAAa,YAAW,aAAa;IAChD,OAAO,CAAC,OAAO,CAAiB;IAChC,OAAO,CAAC,OAAO,CAAgB;gBAEnB,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC,EAAE,OAAO,GAAE,aAAkB;IAS9E,IAAI,IAAI,UAAU;IAgCnB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAO7B;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,OAAO,EAAE,KAAK,CAAC,aAAa,GAAG,YAAY,CAAC,EAC5C,OAAO,GAAE,aAAkB,GAC1B,aAAa,CAEf"}
@@ -0,0 +1,57 @@
1
+ import { InvalidArgumentError } from "../core/errors.js";
2
+ /**
3
+ * Streaming concatenation reader that combines multiple TabularReaders sequentially
4
+ * into a single unified DataStream with zero extra memory overhead and optional source tagging.
5
+ */
6
+ export class ConcatReader {
7
+ sources;
8
+ options;
9
+ constructor(sources, options = {}) {
10
+ if (sources.length === 0) {
11
+ throw new InvalidArgumentError("ConcatReader requires at least one reader or source");
12
+ }
13
+ this.sources = sources.map((s) => ("reader" in s ? s : { reader: s }));
14
+ this.options = options;
15
+ }
16
+ async *read() {
17
+ const sourceCol = this.options.sourceCol;
18
+ const batchSize = this.options.batchSize || 1000;
19
+ let outRows = [];
20
+ let offset = 0;
21
+ for (let i = 0; i < this.sources.length; i++) {
22
+ const src = this.sources[i];
23
+ const label = src.label || `source_${i + 1}`;
24
+ for await (const batch of src.reader.read()) {
25
+ for (const row of batch.rows) {
26
+ const outRow = { ...row };
27
+ if (sourceCol) {
28
+ outRow[sourceCol] = label;
29
+ }
30
+ outRows.push(outRow);
31
+ if (outRows.length >= batchSize) {
32
+ yield { rows: outRows, offset };
33
+ offset += outRows.length;
34
+ outRows = [];
35
+ }
36
+ }
37
+ }
38
+ }
39
+ if (outRows.length > 0) {
40
+ yield { rows: outRows, offset };
41
+ }
42
+ }
43
+ async close() {
44
+ for (const src of this.sources) {
45
+ if (src.reader.close) {
46
+ await src.reader.close();
47
+ }
48
+ }
49
+ }
50
+ }
51
+ /**
52
+ * Helper to concatenate multiple tabular readers with options.
53
+ */
54
+ export function concatReaders(sources, options = {}) {
55
+ return new ConcatReader(sources, options);
56
+ }
57
+ //# sourceMappingURL=concat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"concat.js","sourceRoot":"","sources":["../../src/transforms/concat.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,mBAAmB,CAAC;AAazD;;;GAGG;AACH,MAAM,OAAO,YAAY;IACf,OAAO,CAAiB;IACxB,OAAO,CAAgB;IAE/B,YAAY,OAA4C,EAAE,UAAyB,EAAE;QACnF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACzB,MAAM,IAAI,oBAAoB,CAAC,qDAAqD,CAAC,CAAC;QACxF,CAAC;QAED,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvE,IAAI,CAAC,OAAO,GAAG,OAAO,CAAC;IACzB,CAAC;IAED,KAAK,CAAC,CAAC,IAAI;QACT,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC;QACzC,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;QACjD,IAAI,OAAO,GAAU,EAAE,CAAC;QACxB,IAAI,MAAM,GAAG,CAAC,CAAC;QAEf,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YAC7C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAE,CAAC;YAC7B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,IAAI,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YAE7C,IAAI,KAAK,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;gBAC5C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC;oBAC7B,MAAM,MAAM,GAAQ,EAAE,GAAG,GAAG,EAAE,CAAC;oBAC/B,IAAI,SAAS,EAAE,CAAC;wBACd,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC;oBAC5B,CAAC;oBAED,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;oBACrB,IAAI,OAAO,CAAC,MAAM,IAAI,SAAS,EAAE,CAAC;wBAChC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;wBAChC,MAAM,IAAI,OAAO,CAAC,MAAM,CAAC;wBACzB,OAAO,GAAG,EAAE,CAAC;oBACf,CAAC;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/B,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;gBACrB,MAAM,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YAC3B,CAAC;QACH,CAAC;IACH,CAAC;CACF;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAC3B,OAA4C,EAC5C,UAAyB,EAAE;IAE3B,OAAO,IAAI,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAC5C,CAAC"}
@@ -0,0 +1,14 @@
1
+ import type { TransformFunction } from "../core/types.js";
2
+ export interface ExplodeOptions {
3
+ column: string;
4
+ delimiter?: string | RegExp;
5
+ trim?: boolean;
6
+ dropEmpty?: boolean;
7
+ preserveNullAndEmpty?: boolean;
8
+ }
9
+ /**
10
+ * High-performance streaming Explode transform.
11
+ * Expands arrays or delimited string values into multiple rows (1 -> N).
12
+ */
13
+ export declare function explodeRows(columnOrOptions: string | ExplodeOptions, options?: Partial<ExplodeOptions>): TransformFunction;
14
+ //# sourceMappingURL=explode.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explode.d.ts","sourceRoot":"","sources":["../../src/transforms/explode.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAA8B,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAEtF,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,oBAAoB,CAAC,EAAE,OAAO,CAAC;CAChC;AAED;;;GAGG;AACH,wBAAgB,WAAW,CACzB,eAAe,EAAE,MAAM,GAAG,cAAc,EACxC,OAAO,CAAC,EAAE,OAAO,CAAC,cAAc,CAAC,GAChC,iBAAiB,CAiFnB"}