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.
- package/README.md +34 -4
- package/dist/analytics/abtest.d.ts +39 -0
- package/dist/analytics/abtest.d.ts.map +1 -0
- package/dist/analytics/abtest.js +266 -0
- package/dist/analytics/abtest.js.map +1 -0
- package/dist/analytics/cluster.d.ts +25 -0
- package/dist/analytics/cluster.d.ts.map +1 -0
- package/dist/analytics/cluster.js +212 -0
- package/dist/analytics/cluster.js.map +1 -0
- package/dist/analytics/cohort.d.ts +22 -0
- package/dist/analytics/cohort.d.ts.map +1 -0
- package/dist/analytics/cohort.js +170 -0
- package/dist/analytics/cohort.js.map +1 -0
- package/dist/analytics/correlation.d.ts +15 -0
- package/dist/analytics/correlation.d.ts.map +1 -0
- package/dist/analytics/correlation.js +116 -0
- package/dist/analytics/correlation.js.map +1 -0
- package/dist/analytics/crosstab.d.ts +27 -0
- package/dist/analytics/crosstab.d.ts.map +1 -0
- package/dist/analytics/crosstab.js +90 -0
- package/dist/analytics/crosstab.js.map +1 -0
- package/dist/analytics/entropy.d.ts +23 -0
- package/dist/analytics/entropy.d.ts.map +1 -0
- package/dist/analytics/entropy.js +180 -0
- package/dist/analytics/entropy.js.map +1 -0
- package/dist/analytics/funnel.d.ts +29 -0
- package/dist/analytics/funnel.d.ts.map +1 -0
- package/dist/analytics/funnel.js +170 -0
- package/dist/analytics/funnel.js.map +1 -0
- package/dist/analytics/ngrams.d.ts +25 -0
- package/dist/analytics/ngrams.d.ts.map +1 -0
- package/dist/analytics/ngrams.js +110 -0
- package/dist/analytics/ngrams.js.map +1 -0
- package/dist/analytics/outliers.d.ts +25 -0
- package/dist/analytics/outliers.d.ts.map +1 -0
- package/dist/analytics/outliers.js +114 -0
- package/dist/analytics/outliers.js.map +1 -0
- package/dist/analytics/pareto.d.ts +36 -0
- package/dist/analytics/pareto.d.ts.map +1 -0
- package/dist/analytics/pareto.js +140 -0
- package/dist/analytics/pareto.js.map +1 -0
- package/dist/analytics/quantiles.d.ts +18 -0
- package/dist/analytics/quantiles.d.ts.map +1 -0
- package/dist/analytics/quantiles.js +62 -0
- package/dist/analytics/quantiles.js.map +1 -0
- package/dist/analytics/regression.d.ts +18 -0
- package/dist/analytics/regression.d.ts.map +1 -0
- package/dist/analytics/regression.js +79 -0
- package/dist/analytics/regression.js.map +1 -0
- package/dist/analytics/rfm.d.ts +41 -0
- package/dist/analytics/rfm.d.ts.map +1 -0
- package/dist/analytics/rfm.js +221 -0
- package/dist/analytics/rfm.js.map +1 -0
- package/dist/analytics/stats.d.ts.map +1 -1
- package/dist/analytics/stats.js +65 -15
- package/dist/analytics/stats.js.map +1 -1
- package/dist/analytics/technical.d.ts +19 -0
- package/dist/analytics/technical.d.ts.map +1 -0
- package/dist/analytics/technical.js +365 -0
- package/dist/analytics/technical.js.map +1 -0
- package/dist/cli/commands/abtest.d.ts +10 -0
- package/dist/cli/commands/abtest.d.ts.map +1 -0
- package/dist/cli/commands/abtest.js +68 -0
- package/dist/cli/commands/abtest.js.map +1 -0
- package/dist/cli/commands/cluster.d.ts +9 -0
- package/dist/cli/commands/cluster.d.ts.map +1 -0
- package/dist/cli/commands/cluster.js +77 -0
- package/dist/cli/commands/cluster.js.map +1 -0
- package/dist/cli/commands/cohort.d.ts +10 -0
- package/dist/cli/commands/cohort.d.ts.map +1 -0
- package/dist/cli/commands/cohort.js +66 -0
- package/dist/cli/commands/cohort.js.map +1 -0
- package/dist/cli/commands/completion.d.ts +5 -0
- package/dist/cli/commands/completion.d.ts.map +1 -0
- package/dist/cli/commands/completion.js +7 -0
- package/dist/cli/commands/completion.js.map +1 -0
- package/dist/cli/commands/concat.d.ts +9 -0
- package/dist/cli/commands/concat.d.ts.map +1 -0
- package/dist/cli/commands/concat.js +62 -0
- package/dist/cli/commands/concat.js.map +1 -0
- package/dist/cli/commands/convert.d.ts +2 -0
- package/dist/cli/commands/convert.d.ts.map +1 -1
- package/dist/cli/commands/convert.js.map +1 -1
- package/dist/cli/commands/corr.d.ts +7 -0
- package/dist/cli/commands/corr.d.ts.map +1 -0
- package/dist/cli/commands/corr.js +70 -0
- package/dist/cli/commands/corr.js.map +1 -0
- package/dist/cli/commands/crosstab.d.ts +11 -0
- package/dist/cli/commands/crosstab.d.ts.map +1 -0
- package/dist/cli/commands/crosstab.js +71 -0
- package/dist/cli/commands/crosstab.js.map +1 -0
- package/dist/cli/commands/entropy.d.ts +9 -0
- package/dist/cli/commands/entropy.d.ts.map +1 -0
- package/dist/cli/commands/entropy.js +71 -0
- package/dist/cli/commands/entropy.js.map +1 -0
- package/dist/cli/commands/explode.d.ts +8 -0
- package/dist/cli/commands/explode.d.ts.map +1 -0
- package/dist/cli/commands/explode.js +61 -0
- package/dist/cli/commands/explode.js.map +1 -0
- package/dist/cli/commands/fetch.d.ts +8 -0
- package/dist/cli/commands/fetch.d.ts.map +1 -0
- package/dist/cli/commands/fetch.js +41 -0
- package/dist/cli/commands/fetch.js.map +1 -0
- package/dist/cli/commands/files.d.ts +1 -1
- package/dist/cli/commands/files.d.ts.map +1 -1
- package/dist/cli/commands/flatten.d.ts +8 -0
- package/dist/cli/commands/flatten.d.ts.map +1 -0
- package/dist/cli/commands/flatten.js +57 -0
- package/dist/cli/commands/flatten.js.map +1 -0
- package/dist/cli/commands/freq.d.ts +10 -0
- package/dist/cli/commands/freq.d.ts.map +1 -0
- package/dist/cli/commands/freq.js +122 -0
- package/dist/cli/commands/freq.js.map +1 -0
- package/dist/cli/commands/funnel.d.ts +11 -0
- package/dist/cli/commands/funnel.d.ts.map +1 -0
- package/dist/cli/commands/funnel.js +69 -0
- package/dist/cli/commands/funnel.js.map +1 -0
- package/dist/cli/commands/fuzzy-join.d.ts +25 -0
- package/dist/cli/commands/fuzzy-join.d.ts.map +1 -0
- package/dist/cli/commands/fuzzy-join.js +85 -0
- package/dist/cli/commands/fuzzy-join.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +8 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +34 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/mask.d.ts +6 -0
- package/dist/cli/commands/mask.d.ts.map +1 -0
- package/dist/cli/commands/mask.js +58 -0
- package/dist/cli/commands/mask.js.map +1 -0
- package/dist/cli/commands/ngrams.d.ts +11 -0
- package/dist/cli/commands/ngrams.d.ts.map +1 -0
- package/dist/cli/commands/ngrams.js +70 -0
- package/dist/cli/commands/ngrams.js.map +1 -0
- package/dist/cli/commands/outliers.d.ts +13 -0
- package/dist/cli/commands/outliers.d.ts.map +1 -0
- package/dist/cli/commands/outliers.js +58 -0
- package/dist/cli/commands/outliers.js.map +1 -0
- package/dist/cli/commands/pareto.d.ts +8 -0
- package/dist/cli/commands/pareto.d.ts.map +1 -0
- package/dist/cli/commands/pareto.js +80 -0
- package/dist/cli/commands/pareto.js.map +1 -0
- package/dist/cli/commands/partition.d.ts +8 -0
- package/dist/cli/commands/partition.d.ts.map +1 -0
- package/dist/cli/commands/partition.js +44 -0
- package/dist/cli/commands/partition.js.map +1 -0
- package/dist/cli/commands/pipeline.d.ts +6 -0
- package/dist/cli/commands/pipeline.d.ts.map +1 -1
- package/dist/cli/commands/pipeline.js +22 -0
- package/dist/cli/commands/pipeline.js.map +1 -1
- package/dist/cli/commands/pivot.d.ts +11 -0
- package/dist/cli/commands/pivot.d.ts.map +1 -0
- package/dist/cli/commands/pivot.js +58 -0
- package/dist/cli/commands/pivot.js.map +1 -0
- package/dist/cli/commands/plot.d.ts +12 -0
- package/dist/cli/commands/plot.d.ts.map +1 -0
- package/dist/cli/commands/plot.js +123 -0
- package/dist/cli/commands/plot.js.map +1 -0
- package/dist/cli/commands/quantiles.d.ts +7 -0
- package/dist/cli/commands/quantiles.d.ts.map +1 -0
- package/dist/cli/commands/quantiles.js +94 -0
- package/dist/cli/commands/quantiles.js.map +1 -0
- package/dist/cli/commands/regression.d.ts +7 -0
- package/dist/cli/commands/regression.d.ts.map +1 -0
- package/dist/cli/commands/regression.js +86 -0
- package/dist/cli/commands/regression.js.map +1 -0
- package/dist/cli/commands/report.d.ts +8 -0
- package/dist/cli/commands/report.d.ts.map +1 -0
- package/dist/cli/commands/report.js +36 -0
- package/dist/cli/commands/report.js.map +1 -0
- package/dist/cli/commands/rfm.d.ts +11 -0
- package/dist/cli/commands/rfm.d.ts.map +1 -0
- package/dist/cli/commands/rfm.js +78 -0
- package/dist/cli/commands/rfm.js.map +1 -0
- package/dist/cli/commands/serve.d.ts +7 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +43 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/commands/split.d.ts +8 -0
- package/dist/cli/commands/split.d.ts.map +1 -0
- package/dist/cli/commands/split.js +43 -0
- package/dist/cli/commands/split.js.map +1 -0
- package/dist/cli/commands/table.d.ts +9 -0
- package/dist/cli/commands/table.d.ts.map +1 -0
- package/dist/cli/commands/table.js +9 -0
- package/dist/cli/commands/table.js.map +1 -0
- package/dist/cli/commands/technical.d.ts +8 -0
- package/dist/cli/commands/technical.d.ts.map +1 -0
- package/dist/cli/commands/technical.js +54 -0
- package/dist/cli/commands/technical.js.map +1 -0
- package/dist/cli/commands/test.d.ts +7 -0
- package/dist/cli/commands/test.d.ts.map +1 -0
- package/dist/cli/commands/test.js +53 -0
- package/dist/cli/commands/test.js.map +1 -0
- package/dist/cli/commands/timeseries.d.ts +11 -0
- package/dist/cli/commands/timeseries.d.ts.map +1 -0
- package/dist/cli/commands/timeseries.js +82 -0
- package/dist/cli/commands/timeseries.js.map +1 -0
- package/dist/cli/commands/unpivot.d.ts +12 -0
- package/dist/cli/commands/unpivot.d.ts.map +1 -0
- package/dist/cli/commands/unpivot.js +59 -0
- package/dist/cli/commands/unpivot.js.map +1 -0
- package/dist/cli/completion.d.ts +5 -0
- package/dist/cli/completion.d.ts.map +1 -0
- package/dist/cli/completion.js +194 -0
- package/dist/cli/completion.js.map +1 -0
- package/dist/cli/index.js +816 -15
- package/dist/cli/index.js.map +1 -1
- package/dist/core/error-handler.d.ts +38 -0
- package/dist/core/error-handler.d.ts.map +1 -0
- package/dist/core/error-handler.js +81 -0
- package/dist/core/error-handler.js.map +1 -0
- package/dist/core/pipeline.d.ts +10 -0
- package/dist/core/pipeline.d.ts.map +1 -1
- package/dist/core/pipeline.js +14 -0
- package/dist/core/pipeline.js.map +1 -1
- package/dist/core/types.d.ts +4 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/dataops/fetch.d.ts +27 -0
- package/dist/dataops/fetch.d.ts.map +1 -0
- package/dist/dataops/fetch.js +150 -0
- package/dist/dataops/fetch.js.map +1 -0
- package/dist/dataops/generate.d.ts +16 -0
- package/dist/dataops/generate.d.ts.map +1 -0
- package/dist/dataops/generate.js +201 -0
- package/dist/dataops/generate.js.map +1 -0
- package/dist/dataops/mask.d.ts +25 -0
- package/dist/dataops/mask.d.ts.map +1 -0
- package/dist/dataops/mask.js +133 -0
- package/dist/dataops/mask.js.map +1 -0
- package/dist/dataops/report.d.ts +7 -0
- package/dist/dataops/report.d.ts.map +1 -0
- package/dist/dataops/report.js +139 -0
- package/dist/dataops/report.js.map +1 -0
- package/dist/dataops/server.d.ts +10 -0
- package/dist/dataops/server.d.ts.map +1 -0
- package/dist/dataops/server.js +137 -0
- package/dist/dataops/server.js.map +1 -0
- package/dist/dataops/test-runner.d.ts +34 -0
- package/dist/dataops/test-runner.d.ts.map +1 -0
- package/dist/dataops/test-runner.js +128 -0
- package/dist/dataops/test-runner.js.map +1 -0
- package/dist/db/adapters/sqlite.d.ts.map +1 -1
- package/dist/db/adapters/sqlite.js +4 -1
- package/dist/db/adapters/sqlite.js.map +1 -1
- package/dist/diff/engine.d.ts.map +1 -1
- package/dist/diff/engine.js +73 -16
- package/dist/diff/engine.js.map +1 -1
- package/dist/diff/storage/disk-index.d.ts +10 -1
- package/dist/diff/storage/disk-index.d.ts.map +1 -1
- package/dist/diff/storage/disk-index.js +95 -13
- package/dist/diff/storage/disk-index.js.map +1 -1
- package/dist/files/hash.d.ts +9 -2
- package/dist/files/hash.d.ts.map +1 -1
- package/dist/files/hash.js +9 -10
- package/dist/files/hash.js.map +1 -1
- package/dist/files/reader.d.ts.map +1 -1
- package/dist/files/reader.js +17 -10
- package/dist/files/reader.js.map +1 -1
- package/dist/files/types.d.ts +2 -1
- package/dist/files/types.d.ts.map +1 -1
- package/dist/index.d.ts +65 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +66 -1
- package/dist/index.js.map +1 -1
- package/dist/planner/executor.d.ts.map +1 -1
- package/dist/planner/executor.js +17 -0
- package/dist/planner/executor.js.map +1 -1
- package/dist/planner/types.d.ts +11 -0
- package/dist/planner/types.d.ts.map +1 -1
- package/dist/readers/csv.d.ts.map +1 -1
- package/dist/readers/csv.js +206 -164
- package/dist/readers/csv.js.map +1 -1
- package/dist/readers/json.d.ts.map +1 -1
- package/dist/readers/json.js +145 -121
- package/dist/readers/json.js.map +1 -1
- package/dist/readers/jsonl.d.ts.map +1 -1
- package/dist/readers/jsonl.js +51 -31
- package/dist/readers/jsonl.js.map +1 -1
- package/dist/transforms/concat.d.ts +26 -0
- package/dist/transforms/concat.d.ts.map +1 -0
- package/dist/transforms/concat.js +57 -0
- package/dist/transforms/concat.js.map +1 -0
- package/dist/transforms/explode.d.ts +14 -0
- package/dist/transforms/explode.d.ts.map +1 -0
- package/dist/transforms/explode.js +81 -0
- package/dist/transforms/explode.js.map +1 -0
- package/dist/transforms/flatten.d.ts +12 -0
- package/dist/transforms/flatten.d.ts.map +1 -0
- package/dist/transforms/flatten.js +65 -0
- package/dist/transforms/flatten.js.map +1 -0
- package/dist/transforms/fuzzy-join.d.ts +53 -0
- package/dist/transforms/fuzzy-join.d.ts.map +1 -0
- package/dist/transforms/fuzzy-join.js +347 -0
- package/dist/transforms/fuzzy-join.js.map +1 -0
- package/dist/transforms/jit-compiler.d.ts.map +1 -1
- package/dist/transforms/jit-compiler.js +103 -14
- package/dist/transforms/jit-compiler.js.map +1 -1
- package/dist/transforms/map.d.ts +6 -2
- package/dist/transforms/map.d.ts.map +1 -1
- package/dist/transforms/map.js +64 -26
- package/dist/transforms/map.js.map +1 -1
- package/dist/transforms/partition.d.ts +35 -0
- package/dist/transforms/partition.d.ts.map +1 -0
- package/dist/transforms/partition.js +150 -0
- package/dist/transforms/partition.js.map +1 -0
- package/dist/transforms/pivot.d.ts +16 -0
- package/dist/transforms/pivot.d.ts.map +1 -0
- package/dist/transforms/pivot.js +194 -0
- package/dist/transforms/pivot.js.map +1 -0
- package/dist/transforms/sort/comparator.d.ts.map +1 -1
- package/dist/transforms/sort/comparator.js +153 -24
- package/dist/transforms/sort/comparator.js.map +1 -1
- package/dist/transforms/sort/external-sort.js +1 -1
- package/dist/transforms/sort/external-sort.js.map +1 -1
- package/dist/transforms/split.d.ts +17 -0
- package/dist/transforms/split.d.ts.map +1 -0
- package/dist/transforms/split.js +88 -0
- package/dist/transforms/split.js.map +1 -0
- package/dist/transforms/timeseries.d.ts +42 -0
- package/dist/transforms/timeseries.d.ts.map +1 -0
- package/dist/transforms/timeseries.js +276 -0
- package/dist/transforms/timeseries.js.map +1 -0
- package/dist/transforms/unpivot.d.ts +14 -0
- package/dist/transforms/unpivot.d.ts.map +1 -0
- package/dist/transforms/unpivot.js +56 -0
- package/dist/transforms/unpivot.js.map +1 -0
- package/dist/ui/chart.d.ts +30 -0
- package/dist/ui/chart.d.ts.map +1 -0
- package/dist/ui/chart.js +91 -0
- package/dist/ui/chart.js.map +1 -0
- package/dist/writers/index.d.ts +1 -0
- package/dist/writers/index.d.ts.map +1 -1
- package/dist/writers/index.js +10 -0
- package/dist/writers/index.js.map +1 -1
- package/dist/writers/table.d.ts +23 -0
- package/dist/writers/table.d.ts.map +1 -0
- package/dist/writers/table.js +156 -0
- package/dist/writers/table.js.map +1 -0
- package/package.json +6 -3
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
import { HttpReader } from "../../dataops/fetch.js";
|
|
2
|
+
import { createWriter, inferFormatFromPath as inferWriterFormat } from "../../writers/index.js";
|
|
3
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
4
|
+
export async function fetchCommand(url, options = {}) {
|
|
5
|
+
const parsedHeaders = {};
|
|
6
|
+
if (options.headersList) {
|
|
7
|
+
for (const h of options.headersList) {
|
|
8
|
+
const idx = h.indexOf(":");
|
|
9
|
+
if (idx !== -1) {
|
|
10
|
+
parsedHeaders[h.slice(0, idx).trim()] = h.slice(idx + 1).trim();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
15
|
+
const progress = new ProgressReporter(options);
|
|
16
|
+
const reader = new HttpReader(url, {
|
|
17
|
+
...options,
|
|
18
|
+
batchSize: effectiveBatchSize,
|
|
19
|
+
headers: { ...parsedHeaders, ...options.headers },
|
|
20
|
+
});
|
|
21
|
+
let toFormat = options.to?.toLowerCase();
|
|
22
|
+
if (options.json) {
|
|
23
|
+
toFormat = "json";
|
|
24
|
+
}
|
|
25
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
26
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
27
|
+
}
|
|
28
|
+
if (!toFormat)
|
|
29
|
+
toFormat = "csv";
|
|
30
|
+
const writer = createWriter(options.output || "-", {
|
|
31
|
+
format: toFormat,
|
|
32
|
+
delimiter: options.delimiter,
|
|
33
|
+
...options,
|
|
34
|
+
});
|
|
35
|
+
const stream = reader.read();
|
|
36
|
+
await writer.write(stream);
|
|
37
|
+
if (writer.close)
|
|
38
|
+
await writer.close();
|
|
39
|
+
progress.done();
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=fetch.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.js","sourceRoot":"","sources":["../../../src/cli/commands/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAyB,MAAM,wBAAwB,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAQ3D,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,GAAW,EACX,UAA+B,EAAE;IAEjC,MAAM,aAAa,GAA2B,EAAE,CAAC;IACjD,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;QACxB,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;YACpC,MAAM,GAAG,GAAG,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YAC3B,IAAI,GAAG,KAAK,CAAC,CAAC,EAAE,CAAC;gBACf,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAClE,CAAC;QACH,CAAC;IACH,CAAC;IAED,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE/C,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,GAAG,EAAE;QACjC,GAAG,OAAO;QACV,SAAS,EAAE,kBAAkB;QAC7B,OAAO,EAAE,EAAE,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC,OAAO,EAAE;KAClD,CAAC,CAAC;IAEH,IAAI,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC;SAAM,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,QAAQ,GAAG,KAAK,CAAC;IAEhC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;QACjD,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,EAAE,CAAC;IAC7B,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -13,7 +13,7 @@ export interface FilesCommandOptions extends UnifiedPipelineCliOptions {
|
|
|
13
13
|
mime?: boolean;
|
|
14
14
|
human?: boolean;
|
|
15
15
|
concurrency?: string | number;
|
|
16
|
-
onError?: "
|
|
16
|
+
onError?: "abort" | "skip" | "log" | "fail";
|
|
17
17
|
to?: string;
|
|
18
18
|
json?: boolean;
|
|
19
19
|
output?: string;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAK1E,OAAO,EAAe,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"files.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/files.ts"],"names":[],"mappings":"AAAA,OAAO,EAA8B,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAGtF,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,sBAAsB,CAAC;AAK1E,OAAO,EAAe,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAE5D,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB;IACpE,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC5B,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,IAAI,CAAC,EAAE,cAAc,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;IACtB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,WAAW,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC9B,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,GAAG,MAAM,CAAC;IAC5C,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;CACtB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,UAAU,SAAM,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAmEf;AAED;;GAEG;AACH,wBAAsB,oBAAoB,CACxC,UAAU,SAAM,EAChB,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CASf;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,kBAAkB,GAAG,mBAAwB,GACrD,OAAO,CAAC,IAAI,CAAC,CAUf"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface FlattenCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
separator?: string;
|
|
4
|
+
maxDepth?: string | number;
|
|
5
|
+
arrays?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function flattenCommand(inputPath?: string, options?: FlattenCommandOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=flatten.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/flatten.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC3B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,cAAc,CAClC,SAAS,SAAM,EACf,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { createPipeline } from "../../core/pipeline.js";
|
|
2
|
+
import { createReader, inferFormatFromPath as inferReaderFormat } from "../../readers/index.js";
|
|
3
|
+
import { createWriter, inferFormatFromPath as inferWriterFormat } from "../../writers/index.js";
|
|
4
|
+
import { openReadableStream } from "../../utils/compression.js";
|
|
5
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
6
|
+
import { flattenRows } from "../../transforms/flatten.js";
|
|
7
|
+
export async function flattenCommand(inputPath = "-", options = {}) {
|
|
8
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
9
|
+
const progress = new ProgressReporter(options);
|
|
10
|
+
let fromFormat = options.from?.toLowerCase();
|
|
11
|
+
if (!fromFormat && inputPath !== "-") {
|
|
12
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
13
|
+
}
|
|
14
|
+
if (!fromFormat)
|
|
15
|
+
fromFormat = "jsonl";
|
|
16
|
+
let toFormat = options.to?.toLowerCase();
|
|
17
|
+
if (options.json) {
|
|
18
|
+
toFormat = "json";
|
|
19
|
+
}
|
|
20
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
21
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
22
|
+
}
|
|
23
|
+
if (!toFormat)
|
|
24
|
+
toFormat = "jsonl";
|
|
25
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
26
|
+
const reader = createReader(readerInput, {
|
|
27
|
+
format: fromFormat,
|
|
28
|
+
sheet: options.sheet,
|
|
29
|
+
delimiter: options.delimiter,
|
|
30
|
+
filePath: inputPath,
|
|
31
|
+
...options,
|
|
32
|
+
batchSize: effectiveBatchSize,
|
|
33
|
+
});
|
|
34
|
+
const writer = createWriter(options.output || "-", {
|
|
35
|
+
format: toFormat,
|
|
36
|
+
delimiter: options.delimiter,
|
|
37
|
+
...options,
|
|
38
|
+
});
|
|
39
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize })
|
|
40
|
+
.pipe(flattenRows({
|
|
41
|
+
separator: options.separator ?? ".",
|
|
42
|
+
maxDepth: options.maxDepth ? Number(options.maxDepth) : 10,
|
|
43
|
+
arrays: options.arrays === true,
|
|
44
|
+
}));
|
|
45
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
46
|
+
try {
|
|
47
|
+
await pipeline.to(writer);
|
|
48
|
+
}
|
|
49
|
+
finally {
|
|
50
|
+
if (reader.close)
|
|
51
|
+
await reader.close();
|
|
52
|
+
if (writer.close)
|
|
53
|
+
await writer.close();
|
|
54
|
+
}
|
|
55
|
+
progress.done();
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=flatten.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"flatten.js","sourceRoot":"","sources":["../../../src/cli/commands/flatten.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface FreqCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
top?: string | number;
|
|
4
|
+
asc?: boolean;
|
|
5
|
+
noNulls?: boolean;
|
|
6
|
+
chart?: boolean;
|
|
7
|
+
width?: string | number;
|
|
8
|
+
}
|
|
9
|
+
export declare function freqCommand(inputPath: string | undefined, column: string, options?: FreqCommandOptions): Promise<void>;
|
|
10
|
+
//# sourceMappingURL=freq.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freq.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/freq.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,kBAAmB,SAAQ,yBAAyB;IACnE,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,GAAG,CAAC,EAAE,OAAO,CAAC;IACd,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,wBAAsB,WAAW,CAC/B,SAAS,oBAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CA+Hf"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { createPipeline } from "../../core/pipeline.js";
|
|
2
|
+
import { createReader, inferFormatFromPath as inferReaderFormat } from "../../readers/index.js";
|
|
3
|
+
import { createWriter, inferFormatFromPath as inferWriterFormat } from "../../writers/index.js";
|
|
4
|
+
import { openReadableStream } from "../../utils/compression.js";
|
|
5
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
6
|
+
import { formatNumber } from "../../utils/formatting.js";
|
|
7
|
+
import { renderBarChart } from "../../ui/chart.js";
|
|
8
|
+
export async function freqCommand(inputPath = "-", column, options = {}) {
|
|
9
|
+
if (!column || column.trim().length === 0) {
|
|
10
|
+
throw new Error("Column name for frequency analysis is required (e.g. rowpipe freq netflix.csv country)");
|
|
11
|
+
}
|
|
12
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
13
|
+
const progress = new ProgressReporter(options);
|
|
14
|
+
const topLimit = options.top !== undefined ? Number(options.top) : 20;
|
|
15
|
+
let fromFormat = options.from?.toLowerCase();
|
|
16
|
+
if (!fromFormat && inputPath !== "-") {
|
|
17
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
18
|
+
}
|
|
19
|
+
if (!fromFormat)
|
|
20
|
+
fromFormat = "csv";
|
|
21
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
22
|
+
const reader = createReader(readerInput, {
|
|
23
|
+
format: fromFormat,
|
|
24
|
+
sheet: options.sheet,
|
|
25
|
+
delimiter: options.delimiter,
|
|
26
|
+
filePath: inputPath,
|
|
27
|
+
...options,
|
|
28
|
+
batchSize: effectiveBatchSize,
|
|
29
|
+
});
|
|
30
|
+
const counts = new Map();
|
|
31
|
+
let totalRows = 0;
|
|
32
|
+
let nullCount = 0;
|
|
33
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
34
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
35
|
+
for await (const batch of pipeline.batches()) {
|
|
36
|
+
for (const row of batch.rows) {
|
|
37
|
+
totalRows++;
|
|
38
|
+
const val = row[column];
|
|
39
|
+
if (val === null || val === undefined || val === "") {
|
|
40
|
+
nullCount++;
|
|
41
|
+
if (options.noNulls)
|
|
42
|
+
continue;
|
|
43
|
+
}
|
|
44
|
+
const key = val === null || val === undefined ? "<null>" : String(val);
|
|
45
|
+
counts.set(key, (counts.get(key) || 0) + 1);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
progress.done();
|
|
49
|
+
// Sort by count
|
|
50
|
+
const sorted = Array.from(counts.entries()).sort((a, b) => {
|
|
51
|
+
return options.asc ? a[1] - b[1] : b[1] - a[1];
|
|
52
|
+
});
|
|
53
|
+
const limited = topLimit > 0 ? sorted.slice(0, topLimit) : sorted;
|
|
54
|
+
const resultRows = limited.map(([val, count]) => {
|
|
55
|
+
const pct = totalRows > 0 ? ((count / totalRows) * 100).toFixed(2) : "0.00";
|
|
56
|
+
return {
|
|
57
|
+
[column]: val,
|
|
58
|
+
count,
|
|
59
|
+
percent: `${pct}%`,
|
|
60
|
+
};
|
|
61
|
+
});
|
|
62
|
+
const isStructuredOutput = Boolean(options.to || options.output || options.json);
|
|
63
|
+
if (isStructuredOutput) {
|
|
64
|
+
let toFormat = options.to?.toLowerCase();
|
|
65
|
+
if (options.json) {
|
|
66
|
+
toFormat = "json";
|
|
67
|
+
}
|
|
68
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
69
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
70
|
+
}
|
|
71
|
+
if (!toFormat)
|
|
72
|
+
toFormat = "csv";
|
|
73
|
+
const writer = createWriter(options.output || "-", {
|
|
74
|
+
format: toFormat,
|
|
75
|
+
delimiter: options.delimiter,
|
|
76
|
+
...options,
|
|
77
|
+
});
|
|
78
|
+
async function* outputBatches() {
|
|
79
|
+
yield { rows: resultRows, offset: 0 };
|
|
80
|
+
}
|
|
81
|
+
await writer.write(outputBatches());
|
|
82
|
+
if (writer.close)
|
|
83
|
+
await writer.close();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
if (options.chart) {
|
|
87
|
+
const maxWidth = options.width !== undefined ? Number(options.width) : 30;
|
|
88
|
+
const chartItems = resultRows.map((r) => ({
|
|
89
|
+
label: String(r[column]),
|
|
90
|
+
value: Number(r["count"]),
|
|
91
|
+
percent: String(r["percent"]),
|
|
92
|
+
}));
|
|
93
|
+
process.stdout.write(`\n--- Frequency Chart: ${column} (Total: ${formatNumber(totalRows)} rows) ---\n`);
|
|
94
|
+
process.stdout.write(renderBarChart(chartItems, { maxWidth }) + "\n");
|
|
95
|
+
if (sorted.length > limited.length) {
|
|
96
|
+
process.stdout.write(`... and ${formatNumber(sorted.length - limited.length)} more distinct values.\n`);
|
|
97
|
+
}
|
|
98
|
+
process.stdout.write("\n");
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
// Pretty terminal print
|
|
102
|
+
const colName = column;
|
|
103
|
+
const maxValLen = Math.max(colName.length, ...resultRows.map((r) => String(r[column]).length));
|
|
104
|
+
const maxCountLen = Math.max(5, ...resultRows.map((r) => formatNumber(Number(r["count"])).length));
|
|
105
|
+
process.stdout.write(`\n--- Frequency Distribution: ${column} (Total: ${formatNumber(totalRows)} rows) ---\n`);
|
|
106
|
+
const header = `${colName.padEnd(maxValLen)} ${"COUNT".padStart(maxCountLen)} ${"PERCENT".padStart(8)}\n`;
|
|
107
|
+
process.stdout.write(header);
|
|
108
|
+
process.stdout.write(`${"-".repeat(maxValLen)} ${"-".repeat(maxCountLen)} ${"-".repeat(8)}\n`);
|
|
109
|
+
for (const r of resultRows) {
|
|
110
|
+
const v = String(r[column]).padEnd(maxValLen);
|
|
111
|
+
const c = formatNumber(Number(r["count"])).padStart(maxCountLen);
|
|
112
|
+
const p = String(r["percent"]).padStart(8);
|
|
113
|
+
process.stdout.write(`${v} ${c} ${p}\n`);
|
|
114
|
+
}
|
|
115
|
+
if (sorted.length > limited.length) {
|
|
116
|
+
process.stdout.write(`... and ${formatNumber(sorted.length - limited.length)} more distinct values.\n`);
|
|
117
|
+
}
|
|
118
|
+
process.stdout.write("\n");
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=freq.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"freq.js","sourceRoot":"","sources":["../../../src/cli/commands/freq.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type FunnelOptions } from "../../analytics/funnel.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface FunnelCommandOptions extends UnifiedPipelineCliOptions, FunnelOptions {
|
|
4
|
+
steps?: string | string[];
|
|
5
|
+
userId?: string;
|
|
6
|
+
step?: string;
|
|
7
|
+
timeCol?: string;
|
|
8
|
+
strict?: boolean;
|
|
9
|
+
}
|
|
10
|
+
export declare function funnelCommand(inputPath?: string, options?: FunnelCommandOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=funnel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funnel.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/funnel.ts"],"names":[],"mappings":"AAMA,OAAO,EAAiB,KAAK,aAAa,EAAE,MAAM,2BAA2B,CAAC;AAE9E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,oBAAqB,SAAQ,yBAAyB,EAAE,aAAa;IACpF,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IAC1B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAsB,aAAa,CACjC,SAAS,SAAM,EACf,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CAgEf"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import { createPipeline } from "../../core/pipeline.js";
|
|
2
|
+
import { createReader, inferFormatFromPath as inferReaderFormat } from "../../readers/index.js";
|
|
3
|
+
import { createWriter, inferFormatFromPath as inferWriterFormat } from "../../writers/index.js";
|
|
4
|
+
import { openReadableStream } from "../../utils/compression.js";
|
|
5
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
6
|
+
import { formatNumber } from "../../utils/formatting.js";
|
|
7
|
+
import { computeFunnel } from "../../analytics/funnel.js";
|
|
8
|
+
import { formatTable } from "../../writers/table.js";
|
|
9
|
+
export async function funnelCommand(inputPath = "-", options = {}) {
|
|
10
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
11
|
+
const progress = new ProgressReporter(options);
|
|
12
|
+
let fromFormat = options.from?.toLowerCase();
|
|
13
|
+
if (!fromFormat && inputPath !== "-") {
|
|
14
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
15
|
+
}
|
|
16
|
+
if (!fromFormat)
|
|
17
|
+
fromFormat = "csv";
|
|
18
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
19
|
+
const reader = createReader(readerInput, {
|
|
20
|
+
format: fromFormat,
|
|
21
|
+
sheet: options.sheet,
|
|
22
|
+
delimiter: options.delimiter,
|
|
23
|
+
filePath: inputPath,
|
|
24
|
+
...options,
|
|
25
|
+
batchSize: effectiveBatchSize,
|
|
26
|
+
});
|
|
27
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
28
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
29
|
+
const result = await computeFunnel(pipeline.batches(), {
|
|
30
|
+
steps: options.steps,
|
|
31
|
+
userIdCol: options.userId || options.userIdCol,
|
|
32
|
+
stepCol: options.step || options.stepCol,
|
|
33
|
+
timeCol: options.timeCol,
|
|
34
|
+
strict: options.strict,
|
|
35
|
+
windowMs: options.windowMs,
|
|
36
|
+
});
|
|
37
|
+
progress.done();
|
|
38
|
+
const rows = result.formattedRows;
|
|
39
|
+
if (options.json) {
|
|
40
|
+
console.log(JSON.stringify(result, null, 2));
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
const isStructuredOutput = Boolean(options.to || options.output);
|
|
44
|
+
if (isStructuredOutput) {
|
|
45
|
+
let toFormat = options.to?.toLowerCase();
|
|
46
|
+
if (!toFormat && options.output && options.output !== "-") {
|
|
47
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
48
|
+
}
|
|
49
|
+
if (!toFormat)
|
|
50
|
+
toFormat = "csv";
|
|
51
|
+
const writer = createWriter(options.output || "-", {
|
|
52
|
+
format: toFormat,
|
|
53
|
+
delimiter: options.delimiter,
|
|
54
|
+
...options,
|
|
55
|
+
});
|
|
56
|
+
async function* singleBatch() {
|
|
57
|
+
yield { rows, offset: 0 };
|
|
58
|
+
}
|
|
59
|
+
await writer.write(singleBatch());
|
|
60
|
+
if (writer.close)
|
|
61
|
+
await writer.close();
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
process.stdout.write(`\n--- Conversion Funnel Analysis (Entry Users: ${formatNumber(result.total_entry_users)}, Overall Conversion: ${result.overall_conversion_rate.toFixed(1)}%) ---\n`);
|
|
65
|
+
process.stdout.write(formatTable(rows, { style: "unicode" }));
|
|
66
|
+
process.stdout.write("\n");
|
|
67
|
+
}
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=funnel.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"funnel.js","sourceRoot":"","sources":["../../../src/cli/commands/funnel.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
import { type FuzzyJoinType, type FuzzyMethod } from "../../transforms/fuzzy-join.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface FuzzyJoinCommandOptions extends UnifiedPipelineCliOptions {
|
|
4
|
+
on?: string;
|
|
5
|
+
leftKey?: string;
|
|
6
|
+
rightKey?: string;
|
|
7
|
+
type?: FuzzyJoinType;
|
|
8
|
+
method?: FuzzyMethod;
|
|
9
|
+
threshold?: number | string;
|
|
10
|
+
bestMatch?: boolean;
|
|
11
|
+
scoreCol?: string;
|
|
12
|
+
scoreColumn?: string;
|
|
13
|
+
prefixLeft?: string;
|
|
14
|
+
suffixLeft?: string;
|
|
15
|
+
prefixRight?: string;
|
|
16
|
+
suffixRight?: string;
|
|
17
|
+
fromLeft?: string;
|
|
18
|
+
fromRight?: string;
|
|
19
|
+
leftSheet?: string;
|
|
20
|
+
rightSheet?: string;
|
|
21
|
+
caseInsensitive?: boolean;
|
|
22
|
+
trim?: boolean;
|
|
23
|
+
}
|
|
24
|
+
export declare function fuzzyJoinCommand(leftPath: string, rightPath: string, options?: FuzzyJoinCommandOptions): Promise<void>;
|
|
25
|
+
//# sourceMappingURL=fuzzy-join.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-join.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/fuzzy-join.ts"],"names":[],"mappings":"AAIA,OAAO,EAAsB,KAAK,aAAa,EAAE,KAAK,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAE1G,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB;IACxE,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,aAAa,CAAC;IACrB,MAAM,CAAC,EAAE,WAAW,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAED,wBAAsB,gBAAgB,CACpC,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAmFf"}
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import { createReader, inferFormatFromPath as inferReaderFormat } from "../../readers/index.js";
|
|
2
|
+
import { createWriter, inferFormatFromPath as inferWriterFormat } from "../../writers/index.js";
|
|
3
|
+
import { openReadableStream } from "../../utils/compression.js";
|
|
4
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
5
|
+
import { fuzzyJoinTransform } from "../../transforms/fuzzy-join.js";
|
|
6
|
+
import { InvalidArgumentError } from "../../core/errors.js";
|
|
7
|
+
export async function fuzzyJoinCommand(leftPath, rightPath, options = {}) {
|
|
8
|
+
if (!leftPath || !rightPath) {
|
|
9
|
+
throw new InvalidArgumentError("Usage: rowpipe fuzzy-join <left_file> <right_file> --on <col> [options]");
|
|
10
|
+
}
|
|
11
|
+
const progress = new ProgressReporter(options);
|
|
12
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
13
|
+
let fromLeft = options.fromLeft || options.from;
|
|
14
|
+
if (!fromLeft && leftPath !== "-") {
|
|
15
|
+
fromLeft = inferReaderFormat(leftPath) ?? undefined;
|
|
16
|
+
}
|
|
17
|
+
let fromRight = options.fromRight || options.from;
|
|
18
|
+
if (!fromRight && rightPath !== "-") {
|
|
19
|
+
fromRight = inferReaderFormat(rightPath) ?? undefined;
|
|
20
|
+
}
|
|
21
|
+
const leftReaderInput = leftPath === "-" ? openReadableStream("-", options) : leftPath;
|
|
22
|
+
const leftReader = createReader(leftReaderInput, {
|
|
23
|
+
format: fromLeft,
|
|
24
|
+
sheet: options.leftSheet || options.sheet,
|
|
25
|
+
delimiter: options.delimiter,
|
|
26
|
+
filePath: leftPath,
|
|
27
|
+
...options,
|
|
28
|
+
batchSize: effectiveBatchSize,
|
|
29
|
+
});
|
|
30
|
+
const rightReaderInput = rightPath === "-" ? openReadableStream("-", options) : rightPath;
|
|
31
|
+
const rightReader = createReader(rightReaderInput, {
|
|
32
|
+
format: fromRight,
|
|
33
|
+
sheet: options.rightSheet || options.sheet,
|
|
34
|
+
delimiter: options.delimiter,
|
|
35
|
+
filePath: rightPath,
|
|
36
|
+
...options,
|
|
37
|
+
batchSize: effectiveBatchSize,
|
|
38
|
+
});
|
|
39
|
+
const onKey = options.on || "name";
|
|
40
|
+
const leftKey = options.leftKey || onKey;
|
|
41
|
+
const rightKey = options.rightKey || onKey;
|
|
42
|
+
const numThreshold = options.threshold !== undefined ? Number(options.threshold) : 0.75;
|
|
43
|
+
const scoreCol = options.scoreCol || options.scoreColumn;
|
|
44
|
+
const transform = fuzzyJoinTransform({
|
|
45
|
+
rightReader,
|
|
46
|
+
leftKey,
|
|
47
|
+
rightKey,
|
|
48
|
+
type: options.type || "left",
|
|
49
|
+
method: options.method || "levenshtein",
|
|
50
|
+
threshold: numThreshold,
|
|
51
|
+
bestMatch: options.bestMatch !== false,
|
|
52
|
+
scoreCol,
|
|
53
|
+
prefixLeft: options.prefixLeft,
|
|
54
|
+
suffixLeft: options.suffixLeft,
|
|
55
|
+
prefixRight: options.prefixRight,
|
|
56
|
+
suffixRight: options.suffixRight,
|
|
57
|
+
caseInsensitive: options.caseInsensitive !== false,
|
|
58
|
+
trim: options.trim !== false,
|
|
59
|
+
batchSize: effectiveBatchSize,
|
|
60
|
+
});
|
|
61
|
+
const transformedBatches = transform(leftReader.read());
|
|
62
|
+
let toFormat = options.to?.toLowerCase();
|
|
63
|
+
if (options.json) {
|
|
64
|
+
toFormat = "json";
|
|
65
|
+
}
|
|
66
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
67
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
68
|
+
}
|
|
69
|
+
if (!toFormat)
|
|
70
|
+
toFormat = "csv";
|
|
71
|
+
const writer = createWriter(options.output || "-", {
|
|
72
|
+
format: toFormat,
|
|
73
|
+
delimiter: options.delimiter,
|
|
74
|
+
...options,
|
|
75
|
+
});
|
|
76
|
+
await writer.write(transformedBatches);
|
|
77
|
+
if (writer.close)
|
|
78
|
+
await writer.close();
|
|
79
|
+
if (leftReader.close)
|
|
80
|
+
await leftReader.close();
|
|
81
|
+
if (rightReader.close)
|
|
82
|
+
await rightReader.close();
|
|
83
|
+
progress.done();
|
|
84
|
+
}
|
|
85
|
+
//# sourceMappingURL=fuzzy-join.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fuzzy-join.js","sourceRoot":"","sources":["../../../src/cli/commands/fuzzy-join.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface GenerateCommandOptions extends Omit<UnifiedPipelineCliOptions, "count"> {
|
|
3
|
+
schema?: string;
|
|
4
|
+
rows?: number | string;
|
|
5
|
+
count?: number | string;
|
|
6
|
+
}
|
|
7
|
+
export declare function generateCommand(schemaArg?: string, options?: GenerateCommandOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=generate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,sBAAuB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,OAAO,CAAC;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACvB,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;CACzB;AAED,wBAAsB,eAAe,CACnC,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CA8Bf"}
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { SyntheticDataGenerator } from "../../dataops/generate.js";
|
|
2
|
+
import { createWriter, inferFormatFromPath as inferWriterFormat } from "../../writers/index.js";
|
|
3
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
4
|
+
import { InvalidArgumentError } from "../../core/errors.js";
|
|
5
|
+
export async function generateCommand(schemaArg, options = {}) {
|
|
6
|
+
const schemaSpec = schemaArg || options.schema || "id:seq,name:name,email:email,age:int(18,70),created_at:date";
|
|
7
|
+
const rowCount = Number(options.rows || options.count || 1000);
|
|
8
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
9
|
+
if (Number.isNaN(rowCount) || rowCount <= 0) {
|
|
10
|
+
throw new InvalidArgumentError(`Invalid row count: ${options.rows}`);
|
|
11
|
+
}
|
|
12
|
+
const progress = new ProgressReporter(options);
|
|
13
|
+
const generator = new SyntheticDataGenerator(schemaSpec, rowCount, effectiveBatchSize);
|
|
14
|
+
let toFormat = options.to?.toLowerCase();
|
|
15
|
+
if (options.json) {
|
|
16
|
+
toFormat = "json";
|
|
17
|
+
}
|
|
18
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
19
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
20
|
+
}
|
|
21
|
+
if (!toFormat)
|
|
22
|
+
toFormat = "csv";
|
|
23
|
+
const writer = createWriter(options.output || "-", {
|
|
24
|
+
format: toFormat,
|
|
25
|
+
delimiter: options.delimiter,
|
|
26
|
+
...options,
|
|
27
|
+
});
|
|
28
|
+
const stream = generator.read();
|
|
29
|
+
await writer.write(stream);
|
|
30
|
+
if (writer.close)
|
|
31
|
+
await writer.close();
|
|
32
|
+
progress.done();
|
|
33
|
+
}
|
|
34
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,YAAY,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAS5D,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,SAAkB,EAClB,UAAkC,EAAE;IAEpC,MAAM,UAAU,GAAG,SAAS,IAAI,OAAO,CAAC,MAAM,IAAI,6DAA6D,CAAC;IAChH,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC;IAC/D,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAE7D,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,QAAQ,IAAI,CAAC,EAAE,CAAC;QAC5C,MAAM,IAAI,oBAAoB,CAAC,sBAAsB,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC;IACvE,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,SAAS,GAAG,IAAI,sBAAsB,CAAC,UAAU,EAAE,QAAQ,EAAE,kBAAkB,CAAC,CAAC;IAEvF,IAAI,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;IACzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACjB,QAAQ,GAAG,MAAM,CAAC;IACpB,CAAC;SAAM,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACjE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;IAC5D,CAAC;IACD,IAAI,CAAC,QAAQ;QAAE,QAAQ,GAAG,KAAK,CAAC;IAEhC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;QACjD,MAAM,EAAE,QAAQ;QAChB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,GAAG,OAAO;KACX,CAAC,CAAC;IAEH,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,CAAC;IAChC,MAAM,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;IAC3B,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvC,QAAQ,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import { type MaskOptions } from "../../dataops/mask.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface MaskCommandOptions extends Omit<UnifiedPipelineCliOptions, "batchSize">, MaskOptions {
|
|
4
|
+
}
|
|
5
|
+
export declare function maskCommand(inputPath?: string, options?: MaskCommandOptions): Promise<void>;
|
|
6
|
+
//# sourceMappingURL=mask.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mask.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mask.ts"],"names":[],"mappings":"AAKA,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACxE,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC,EAAE,WAAW;CAAG;AAExG,wBAAsB,WAAW,CAC/B,SAAS,SAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAsDf"}
|