rowpipe 2.2.1 → 2.10.1
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 +35 -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/rowpipe +4 -0
- 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,43 @@
|
|
|
1
|
+
import { createPipeline } from "../../core/pipeline.js";
|
|
2
|
+
import { createReader, inferFormatFromPath as inferReaderFormat } from "../../readers/index.js";
|
|
3
|
+
import { openReadableStream } from "../../utils/compression.js";
|
|
4
|
+
import { ProgressReporter } from "../../utils/progress.js";
|
|
5
|
+
import { formatNumber } from "../../utils/formatting.js";
|
|
6
|
+
import { splitStream } from "../../transforms/split.js";
|
|
7
|
+
export async function splitCommand(inputPath = "-", options = {}) {
|
|
8
|
+
const pattern = options.outPattern || options.output;
|
|
9
|
+
if (!pattern) {
|
|
10
|
+
throw new Error("Output pattern is required for splitting (e.g. rowpipe split data.csv --chunk-size 10000 --out-pattern 'parts/chunk_{n:03d}.csv')");
|
|
11
|
+
}
|
|
12
|
+
const chunkSize = options.chunkSize !== undefined ? Number(options.chunkSize) : 100000;
|
|
13
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
14
|
+
const progress = new ProgressReporter(options);
|
|
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 pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
31
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
32
|
+
const result = await splitStream(pipeline.batches(), {
|
|
33
|
+
chunkSize,
|
|
34
|
+
outPattern: pattern,
|
|
35
|
+
format: options.to,
|
|
36
|
+
delimiter: options.delimiter,
|
|
37
|
+
});
|
|
38
|
+
progress.done();
|
|
39
|
+
if (!options.quiet) {
|
|
40
|
+
process.stdout.write(`\nSplit complete: Split ${formatNumber(result.rowCount)} rows into ${formatNumber(result.fileCount)} chunk files (chunk size: ${formatNumber(chunkSize)} rows).\n`);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=split.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"split.js","sourceRoot":"","sources":["../../../src/cli/commands/split.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;AAC3D,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,WAAW,EAAqB,MAAM,2BAA2B,CAAC;AAQ3E,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAS,GAAG,GAAG,EACf,UAA+B,EAAE;IAEjC,MAAM,OAAO,GAAG,OAAO,CAAC,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IACrD,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CACb,mIAAmI,CACpI,CAAC;IACJ,CAAC;IAED,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;IACvF,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC7D,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAE/C,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;IAC7C,IAAI,CAAC,UAAU,IAAI,SAAS,KAAK,GAAG,EAAE,CAAC;QACrC,UAAU,GAAG,iBAAiB,CAAC,SAAS,CAAC,IAAI,SAAS,CAAC;IACzD,CAAC;IACD,IAAI,CAAC,UAAU;QAAE,UAAU,GAAG,KAAK,CAAC;IAEpC,MAAM,WAAW,GAAG,SAAS,KAAK,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IACrF,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE;QACvC,MAAM,EAAE,UAAU;QAClB,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,OAAO,CAAC,SAAS;QAC5B,QAAQ,EAAE,SAAS;QACnB,GAAG,OAAO;QACV,SAAS,EAAE,kBAAkB;KAC9B,CAAC,CAAC;IAEH,MAAM,QAAQ,GAAG,cAAc,CAAC,MAAM,EAAE,EAAE,SAAS,EAAE,kBAAkB,EAAE,CAAC,CAAC;IAC3E,QAAQ,CAAC,UAAU,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;IAErD,MAAM,MAAM,GAAG,MAAM,WAAW,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;QACnD,SAAS;QACT,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,OAAO,CAAC,EAAE;QAClB,SAAS,EAAE,OAAO,CAAC,SAAS;KAC7B,CAAC,CAAC;IAEH,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhB,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;QACnB,OAAO,CAAC,MAAM,CAAC,KAAK,CAClB,2BAA2B,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,YAAY,CAAC,MAAM,CAAC,SAAS,CAAC,6BAA6B,YAAY,CAAC,SAAS,CAAC,WAAW,CACpK,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
import type { TableWriterOptions } from "../../writers/table.js";
|
|
3
|
+
export interface TableCommandOptions extends UnifiedPipelineCliOptions, TableWriterOptions {
|
|
4
|
+
style?: "unicode" | "ascii" | "compact";
|
|
5
|
+
maxColWidth?: number;
|
|
6
|
+
maxBuffer?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function tableCommand(inputPath?: string, options?: TableCommandOptions): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=table.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAA0B,KAAK,yBAAyB,EAAE,MAAM,eAAe,CAAC;AACvF,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAEjE,MAAM,WAAW,mBAAoB,SAAQ,yBAAyB,EAAE,kBAAkB;IACxF,KAAK,CAAC,EAAE,SAAS,GAAG,OAAO,GAAG,SAAS,CAAC;IACxC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,wBAAsB,YAAY,CAChC,SAAS,SAAM,EACf,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAMf"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { unifiedPipelineCommand } from "./pipeline.js";
|
|
2
|
+
export async function tableCommand(inputPath = "-", options = {}) {
|
|
3
|
+
await unifiedPipelineCommand(inputPath, {
|
|
4
|
+
...options,
|
|
5
|
+
to: "table",
|
|
6
|
+
maxBufferRows: options.maxBuffer ?? options.maxBufferRows,
|
|
7
|
+
});
|
|
8
|
+
}
|
|
9
|
+
//# sourceMappingURL=table.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"table.js","sourceRoot":"","sources":["../../../src/cli/commands/table.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAkC,MAAM,eAAe,CAAC;AASvF,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAS,GAAG,GAAG,EACf,UAA+B,EAAE;IAEjC,MAAM,sBAAsB,CAAC,SAAS,EAAE;QACtC,GAAG,OAAO;QACV,EAAE,EAAE,OAAO;QACX,aAAa,EAAE,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,aAAa;KACnD,CAAC,CAAC;AACZ,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type TechnicalOptions } from "../../analytics/technical.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface TechnicalCommandOptions extends UnifiedPipelineCliOptions, TechnicalOptions {
|
|
4
|
+
price?: string;
|
|
5
|
+
volume?: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function technicalCommand(inputPath?: string, options?: TechnicalCommandOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=technical.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/technical.ts"],"names":[],"mappings":"AAKA,OAAO,EAAsB,KAAK,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AACzF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,uBAAwB,SAAQ,yBAAyB,EAAE,gBAAgB;IAC1F,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,wBAAsB,gBAAgB,CACpC,SAAS,SAAM,EACf,OAAO,GAAE,uBAA4B,GACpC,OAAO,CAAC,IAAI,CAAC,CAiDf"}
|
|
@@ -0,0 +1,54 @@
|
|
|
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 { technicalTransform } from "../../analytics/technical.js";
|
|
7
|
+
export async function technicalCommand(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 = "csv";
|
|
16
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
17
|
+
const reader = createReader(readerInput, {
|
|
18
|
+
format: fromFormat,
|
|
19
|
+
sheet: options.sheet,
|
|
20
|
+
delimiter: options.delimiter,
|
|
21
|
+
filePath: inputPath,
|
|
22
|
+
...options,
|
|
23
|
+
batchSize: effectiveBatchSize,
|
|
24
|
+
});
|
|
25
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
26
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
27
|
+
const transformedBatches = technicalTransform(pipeline.batches(), {
|
|
28
|
+
priceCol: options.price || options.priceCol,
|
|
29
|
+
volumeCol: options.volume || options.volumeCol,
|
|
30
|
+
highCol: options.highCol,
|
|
31
|
+
lowCol: options.lowCol,
|
|
32
|
+
closeCol: options.closeCol,
|
|
33
|
+
indicators: options.indicators,
|
|
34
|
+
});
|
|
35
|
+
let toFormat = options.to?.toLowerCase();
|
|
36
|
+
if (options.json) {
|
|
37
|
+
toFormat = "json";
|
|
38
|
+
}
|
|
39
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
40
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
41
|
+
}
|
|
42
|
+
if (!toFormat)
|
|
43
|
+
toFormat = "csv";
|
|
44
|
+
const writer = createWriter(options.output || "-", {
|
|
45
|
+
format: toFormat,
|
|
46
|
+
delimiter: options.delimiter,
|
|
47
|
+
...options,
|
|
48
|
+
});
|
|
49
|
+
await writer.write(transformedBatches);
|
|
50
|
+
if (writer.close)
|
|
51
|
+
await writer.close();
|
|
52
|
+
progress.done();
|
|
53
|
+
}
|
|
54
|
+
//# sourceMappingURL=technical.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"technical.js","sourceRoot":"","sources":["../../../src/cli/commands/technical.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { type DataTestOptions } from "../../dataops/test-runner.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface TestCommandOptions extends Omit<UnifiedPipelineCliOptions, "unique">, DataTestOptions {
|
|
4
|
+
failOnError?: boolean;
|
|
5
|
+
}
|
|
6
|
+
export declare function testCommand(inputPath?: string, options?: TestCommandOptions): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=test.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"AAIA,OAAO,EAAgB,KAAK,eAAe,EAAE,MAAM,8BAA8B,CAAC;AAElF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,kBAAmB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,QAAQ,CAAC,EAAE,eAAe;IACpG,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,WAAW,CAC/B,SAAS,SAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAqDf"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { createPipeline } from "../../core/pipeline.js";
|
|
2
|
+
import { createReader, inferFormatFromPath as inferReaderFormat } from "../../readers/index.js";
|
|
3
|
+
import { openReadableStream } from "../../utils/compression.js";
|
|
4
|
+
import { formatTable } from "../../writers/table.js";
|
|
5
|
+
import { runDataTests } from "../../dataops/test-runner.js";
|
|
6
|
+
export async function testCommand(inputPath = "-", options = {}) {
|
|
7
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
8
|
+
let fromFormat = options.from?.toLowerCase();
|
|
9
|
+
if (!fromFormat && inputPath !== "-") {
|
|
10
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
11
|
+
}
|
|
12
|
+
if (!fromFormat)
|
|
13
|
+
fromFormat = "csv";
|
|
14
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
15
|
+
const reader = createReader(readerInput, {
|
|
16
|
+
format: fromFormat,
|
|
17
|
+
sheet: options.sheet,
|
|
18
|
+
delimiter: options.delimiter,
|
|
19
|
+
filePath: inputPath,
|
|
20
|
+
...options,
|
|
21
|
+
batchSize: effectiveBatchSize,
|
|
22
|
+
});
|
|
23
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
24
|
+
const summary = await runDataTests(pipeline.batches(), {
|
|
25
|
+
assert: options.assert,
|
|
26
|
+
notNull: options.notNull,
|
|
27
|
+
unique: typeof options.unique === "string" || Array.isArray(options.unique) ? options.unique : undefined,
|
|
28
|
+
minRows: options.minRows !== undefined ? Number(options.minRows) : undefined,
|
|
29
|
+
maxRows: options.maxRows !== undefined ? Number(options.maxRows) : undefined,
|
|
30
|
+
maxErrors: options.maxErrors !== undefined ? Number(options.maxErrors) : 5,
|
|
31
|
+
failFast: options.failFast,
|
|
32
|
+
});
|
|
33
|
+
if (options.json) {
|
|
34
|
+
process.stdout.write(JSON.stringify(summary, null, 2) + "\n");
|
|
35
|
+
}
|
|
36
|
+
else {
|
|
37
|
+
const tableRows = summary.results.map((r) => ({
|
|
38
|
+
rule: r.rule.description,
|
|
39
|
+
status: r.passed ? "PASSED" : "FAILED",
|
|
40
|
+
violations: r.violationsCount,
|
|
41
|
+
sample_violation: r.sampleViolations.length > 0 ? JSON.stringify(r.sampleViolations[0]) : "-",
|
|
42
|
+
}));
|
|
43
|
+
process.stdout.write(formatTable(tableRows, { style: "unicode" }));
|
|
44
|
+
process.stdout.write(`\nTest Result: ${summary.allPassed ? "SUCCESS" : "FAILED"} (${summary.passedRulesCount}/${summary.rulesCount} passed across ${summary.totalRows} rows)\n`);
|
|
45
|
+
}
|
|
46
|
+
if (reader.close)
|
|
47
|
+
await reader.close();
|
|
48
|
+
const failOnError = options.failOnError !== false;
|
|
49
|
+
if (!summary.allPassed && failOnError) {
|
|
50
|
+
process.exit(1);
|
|
51
|
+
}
|
|
52
|
+
}
|
|
53
|
+
//# sourceMappingURL=test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test.js","sourceRoot":"","sources":["../../../src/cli/commands/test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type GapFillMethod } from "../../transforms/timeseries.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface TimeseriesCommandOptions extends UnifiedPipelineCliOptions {
|
|
4
|
+
timeCol?: string;
|
|
5
|
+
timeColumn?: string;
|
|
6
|
+
interval?: string;
|
|
7
|
+
fillGaps?: GapFillMethod;
|
|
8
|
+
timeFormat?: "iso" | "epoch_ms" | "epoch_s" | "date_only";
|
|
9
|
+
}
|
|
10
|
+
export declare function timeseriesCommand(inputPath?: string, options?: TimeseriesCommandOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=timeseries.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeseries.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/timeseries.ts"],"names":[],"mappings":"AAKA,OAAO,EAGL,KAAK,aAAa,EAEnB,MAAM,gCAAgC,CAAC;AACxC,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,wBAAyB,SAAQ,yBAAyB;IACzE,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,aAAa,CAAC;IACzB,UAAU,CAAC,EAAE,KAAK,GAAG,UAAU,GAAG,SAAS,GAAG,WAAW,CAAC;CAC3D;AAED,wBAAsB,iBAAiB,CACrC,SAAS,SAAM,EACf,OAAO,GAAE,wBAA6B,GACrC,OAAO,CAAC,IAAI,CAAC,CAoFf"}
|
|
@@ -0,0 +1,82 @@
|
|
|
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 { resampleTimeseries, parseTimeseriesAggSpecs, } from "../../transforms/timeseries.js";
|
|
7
|
+
export async function timeseriesCommand(inputPath = "-", options = {}) {
|
|
8
|
+
const timeCol = options.timeCol || options.timeColumn;
|
|
9
|
+
if (!timeCol) {
|
|
10
|
+
throw new Error("Time column is required for timeseries resampling (e.g. rowpipe timeseries data.csv --time-col timestamp --interval 1h)");
|
|
11
|
+
}
|
|
12
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
13
|
+
const progress = new ProgressReporter(options);
|
|
14
|
+
let fromFormat = options.from?.toLowerCase();
|
|
15
|
+
if (!fromFormat && inputPath !== "-") {
|
|
16
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
17
|
+
}
|
|
18
|
+
if (!fromFormat)
|
|
19
|
+
fromFormat = "csv";
|
|
20
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
21
|
+
const reader = createReader(readerInput, {
|
|
22
|
+
format: fromFormat,
|
|
23
|
+
sheet: options.sheet,
|
|
24
|
+
delimiter: options.delimiter,
|
|
25
|
+
filePath: inputPath,
|
|
26
|
+
...options,
|
|
27
|
+
batchSize: effectiveBatchSize,
|
|
28
|
+
});
|
|
29
|
+
// Build aggregation specs
|
|
30
|
+
const aggs = [];
|
|
31
|
+
if (options.agg) {
|
|
32
|
+
const rawAggs = Array.isArray(options.agg) ? options.agg : [options.agg];
|
|
33
|
+
aggs.push(...parseTimeseriesAggSpecs(rawAggs));
|
|
34
|
+
}
|
|
35
|
+
function addColAggs(fn, cols) {
|
|
36
|
+
if (!cols)
|
|
37
|
+
return;
|
|
38
|
+
const rawList = Array.isArray(cols) ? cols : [cols];
|
|
39
|
+
const list = rawList.flatMap((item) => item.split(",").map((s) => s.trim()));
|
|
40
|
+
for (const c of list) {
|
|
41
|
+
if (c)
|
|
42
|
+
aggs.push({ fn, column: c, alias: `${fn}_${c}` });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
addColAggs("avg", options.avg);
|
|
46
|
+
addColAggs("sum", options.sum);
|
|
47
|
+
addColAggs("min", options.min);
|
|
48
|
+
addColAggs("max", options.max);
|
|
49
|
+
addColAggs("first", options.first);
|
|
50
|
+
addColAggs("last", options.last);
|
|
51
|
+
if (options.count || aggs.length === 0) {
|
|
52
|
+
aggs.push({ fn: "count", column: "*", alias: "count" });
|
|
53
|
+
}
|
|
54
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
55
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
56
|
+
const resampledStream = pipeline.pipe(resampleTimeseries({
|
|
57
|
+
timeCol,
|
|
58
|
+
interval: options.interval || "1m",
|
|
59
|
+
aggregations: aggs,
|
|
60
|
+
fillGaps: options.fillGaps,
|
|
61
|
+
timeFormat: options.timeFormat || "iso",
|
|
62
|
+
}));
|
|
63
|
+
let toFormat = options.to?.toLowerCase();
|
|
64
|
+
if (options.json) {
|
|
65
|
+
toFormat = "json";
|
|
66
|
+
}
|
|
67
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
68
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
69
|
+
}
|
|
70
|
+
if (!toFormat)
|
|
71
|
+
toFormat = "csv";
|
|
72
|
+
const writer = createWriter(options.output || "-", {
|
|
73
|
+
format: toFormat,
|
|
74
|
+
delimiter: options.delimiter,
|
|
75
|
+
...options,
|
|
76
|
+
});
|
|
77
|
+
await writer.write(resampledStream.batches());
|
|
78
|
+
if (writer.close)
|
|
79
|
+
await writer.close();
|
|
80
|
+
progress.done();
|
|
81
|
+
}
|
|
82
|
+
//# sourceMappingURL=timeseries.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"timeseries.js","sourceRoot":"","sources":["../../../src/cli/commands/timeseries.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface UnpivotCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
index?: string;
|
|
4
|
+
columns?: string;
|
|
5
|
+
varCol?: string;
|
|
6
|
+
variable?: string;
|
|
7
|
+
valCol?: string;
|
|
8
|
+
value?: string;
|
|
9
|
+
dropNull?: boolean;
|
|
10
|
+
}
|
|
11
|
+
export declare function unpivotCommand(inputPath?: string, options?: UnpivotCommandOptions): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=unpivot.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpivot.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/unpivot.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB;IACtE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,QAAQ,CAAC,EAAE,OAAO,CAAC;CACpB;AAED,wBAAsB,cAAc,CAClC,SAAS,SAAM,EACf,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAwDf"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 { unpivotTransform } from "../../transforms/unpivot.js";
|
|
7
|
+
export async function unpivotCommand(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 = "csv";
|
|
16
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
17
|
+
const reader = createReader(readerInput, {
|
|
18
|
+
format: fromFormat,
|
|
19
|
+
sheet: options.sheet,
|
|
20
|
+
delimiter: options.delimiter,
|
|
21
|
+
filePath: inputPath,
|
|
22
|
+
...options,
|
|
23
|
+
batchSize: effectiveBatchSize,
|
|
24
|
+
});
|
|
25
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
26
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
27
|
+
const indexCols = options.index || options.i || options.idVars;
|
|
28
|
+
const columnsCols = options.columns || options.c || options.valueVars;
|
|
29
|
+
const varCol = options.varCol || options.variable || "variable";
|
|
30
|
+
const valCol = options.valCol || options.value || "value";
|
|
31
|
+
const transform = unpivotTransform({
|
|
32
|
+
index: indexCols,
|
|
33
|
+
columns: columnsCols,
|
|
34
|
+
varCol,
|
|
35
|
+
valCol,
|
|
36
|
+
dropNull: options.dropNull,
|
|
37
|
+
batchSize: effectiveBatchSize,
|
|
38
|
+
});
|
|
39
|
+
const transformedBatches = transform(pipeline.batches());
|
|
40
|
+
let toFormat = options.to?.toLowerCase();
|
|
41
|
+
if (options.json) {
|
|
42
|
+
toFormat = "json";
|
|
43
|
+
}
|
|
44
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
45
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
46
|
+
}
|
|
47
|
+
if (!toFormat)
|
|
48
|
+
toFormat = "csv";
|
|
49
|
+
const writer = createWriter(options.output || "-", {
|
|
50
|
+
format: toFormat,
|
|
51
|
+
delimiter: options.delimiter,
|
|
52
|
+
...options,
|
|
53
|
+
});
|
|
54
|
+
await writer.write(transformedBatches);
|
|
55
|
+
if (writer.close)
|
|
56
|
+
await writer.close();
|
|
57
|
+
progress.done();
|
|
58
|
+
}
|
|
59
|
+
//# sourceMappingURL=unpivot.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unpivot.js","sourceRoot":"","sources":["../../../src/cli/commands/unpivot.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export declare function generateZshCompletion(): string;
|
|
2
|
+
export declare function generateBashCompletion(): string;
|
|
3
|
+
export declare function generateFishCompletion(): string;
|
|
4
|
+
export declare function generateCompletion(shell: string): string;
|
|
5
|
+
//# sourceMappingURL=completion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../src/cli/completion.ts"],"names":[],"mappings":"AAAA,wBAAgB,qBAAqB,IAAI,MAAM,CAgI9C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAiC/C;AAED,wBAAgB,sBAAsB,IAAI,MAAM,CAiB/C;AAED,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAWxD"}
|
|
@@ -0,0 +1,194 @@
|
|
|
1
|
+
export function generateZshCompletion() {
|
|
2
|
+
return `#compdef rowpipe
|
|
3
|
+
|
|
4
|
+
_rowpipe() {
|
|
5
|
+
local -a commands
|
|
6
|
+
commands=(
|
|
7
|
+
'inspect:Inspect format, row count, columns, and sheet summary'
|
|
8
|
+
'convert:Stream convert tabular datasets across formats'
|
|
9
|
+
'schema:Infer column types, nullability, and semantic annotations'
|
|
10
|
+
'stats:Compute streaming statistics (Welford numeric stats and HLL distinct counts)'
|
|
11
|
+
'select:Select a subset of columns in stream'
|
|
12
|
+
'rename:Rename columns in stream'
|
|
13
|
+
'cast:Cast column types in stream'
|
|
14
|
+
'filter:Filter rows using safe expression engine'
|
|
15
|
+
'map:Transform and derive columns per row'
|
|
16
|
+
'reduce:Aggregate and group dataset'
|
|
17
|
+
'sample:Reservoir sample rows with bounded memory'
|
|
18
|
+
'validate:Validate stream against schema definition'
|
|
19
|
+
'diff:Compare two tabular datasets by key'
|
|
20
|
+
'files:Stream files and directories as tabular records'
|
|
21
|
+
'diff-files:Compare two directories as streaming tabular datasets'
|
|
22
|
+
'limit:Limit stream to first N rows'
|
|
23
|
+
'offset:Skip first N rows in stream'
|
|
24
|
+
'head:Emit first N rows of stream'
|
|
25
|
+
'tail:Emit last N rows of stream'
|
|
26
|
+
'sort:Sort stream by columns'
|
|
27
|
+
'top:Retain top-N rows using bounded-memory binary heap'
|
|
28
|
+
'unique:Deduplicate rows by key columns'
|
|
29
|
+
'count:Fast streaming row count or group-by counts'
|
|
30
|
+
'group:Group dataset and compute aggregations'
|
|
31
|
+
'db:Stream tabular data from or to databases'
|
|
32
|
+
'join:Join two tabular streams with hash join'
|
|
33
|
+
'window:Apply sliding window and rolling calculations'
|
|
34
|
+
'profile:Profile dataset quality and distributions'
|
|
35
|
+
'clean:Clean and sanitize dataset'
|
|
36
|
+
'explain:Visualize execution plan and optimizations'
|
|
37
|
+
'view:Interactive terminal data viewer'
|
|
38
|
+
'explode:Expand array or delimited string column into multiple rows'
|
|
39
|
+
'flatten:Flatten nested JSON objects into dot-notated columns'
|
|
40
|
+
'freq:Compute frequency distribution and value counts'
|
|
41
|
+
'plot:Render horizontal ASCII/Unicode bar charts and histograms'
|
|
42
|
+
'chart:Alias for plot'
|
|
43
|
+
'table:Render dataset as pretty terminal grid table'
|
|
44
|
+
'completion:Generate shell autocompletion script'
|
|
45
|
+
'partition:Partition stream into dynamic files based on column values'
|
|
46
|
+
'split:Split stream into sequential chunk files'
|
|
47
|
+
'timeseries:Resample timeseries data and fill missing gaps'
|
|
48
|
+
'corr:Compute Pearson correlation matrix across numeric columns'
|
|
49
|
+
'quantiles:Compute streaming quantiles, percentiles, and IQR'
|
|
50
|
+
'percentiles:Alias for quantiles'
|
|
51
|
+
'outliers:Detect and filter statistical outliers and anomalies'
|
|
52
|
+
'anomalies:Alias for outliers'
|
|
53
|
+
'crosstab:Compute 2D contingency table and Chi-Square statistic'
|
|
54
|
+
'regression:Compute Ordinary Least Squares linear regression'
|
|
55
|
+
'trend:Alias for regression'
|
|
56
|
+
'rfm:Compute RFM customer segmentation and scoring'
|
|
57
|
+
'cohort:Compute user retention cohort matrix'
|
|
58
|
+
'funnel:Compute conversion funnel and drop-off rates'
|
|
59
|
+
'abtest:Compute A/B test statistical significance'
|
|
60
|
+
'pareto:Compute 80/20 Pareto distribution and ABC classification'
|
|
61
|
+
'technical:Compute financial technical indicators'
|
|
62
|
+
'indicators:Alias for technical'
|
|
63
|
+
'cluster:Perform streaming Mini-Batch K-Means clustering'
|
|
64
|
+
'kmeans:Alias for cluster'
|
|
65
|
+
'entropy:Compute Shannon entropy and feature importance'
|
|
66
|
+
'importance:Alias for entropy'
|
|
67
|
+
'ngrams:Extract N-Gram word phrases and frequency'
|
|
68
|
+
'tokens:Alias for ngrams'
|
|
69
|
+
'pivot:Create multi-dimensional pivot table'
|
|
70
|
+
'pivot-table:Alias for pivot'
|
|
71
|
+
'crosstab-pivot:Alias for pivot'
|
|
72
|
+
'unpivot:Unpivot wide dataset into long format'
|
|
73
|
+
'melt:Alias for unpivot'
|
|
74
|
+
'wide-to-long:Alias for unpivot'
|
|
75
|
+
'fuzzy-join:Fuzzy approximate string matching join'
|
|
76
|
+
'fuzzyjoin:Alias for fuzzy-join'
|
|
77
|
+
'fuzzy:Alias for fuzzy-join'
|
|
78
|
+
'concat:Stream concatenate multiple tabular files'
|
|
79
|
+
'stack:Alias for concat'
|
|
80
|
+
'union-all:Alias for concat'
|
|
81
|
+
'generate:Stream generate synthetic tabular data'
|
|
82
|
+
'mock:Alias for generate'
|
|
83
|
+
'fake:Alias for generate'
|
|
84
|
+
'synth:Alias for generate'
|
|
85
|
+
'mask:Redact and mask sensitive PII fields'
|
|
86
|
+
'anonymize:Alias for mask'
|
|
87
|
+
'redact:Alias for mask'
|
|
88
|
+
'test:Run data quality tests and assertions'
|
|
89
|
+
'assert:Alias for test'
|
|
90
|
+
'check:Alias for test'
|
|
91
|
+
'serve:Serve dataset via HTTP REST API'
|
|
92
|
+
'api:Alias for serve'
|
|
93
|
+
'http:Alias for serve'
|
|
94
|
+
'report:Generate HTML data health report'
|
|
95
|
+
'summary-html:Alias for report'
|
|
96
|
+
'fetch:Stream tabular data from remote REST API'
|
|
97
|
+
'http-get:Alias for fetch'
|
|
98
|
+
'curl-stream:Alias for fetch'
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
_arguments -C \
|
|
102
|
+
'1: :->command' \
|
|
103
|
+
'*:: :->args'
|
|
104
|
+
|
|
105
|
+
case $state in
|
|
106
|
+
command)
|
|
107
|
+
_describe -t commands 'rowpipe command' commands
|
|
108
|
+
;;
|
|
109
|
+
args)
|
|
110
|
+
case $words[1] in
|
|
111
|
+
convert|inspect|schema|stats|select|filter|map|reduce|diff|table|view|plot|chart|freq|explode|flatten|partition|split|timeseries|corr|quantiles|percentiles|outliers|anomalies|crosstab|regression|trend|rfm|cohort|funnel|abtest|pareto|technical|indicators|cluster|kmeans|entropy|importance|ngrams|tokens|pivot|pivot-table|crosstab-pivot|unpivot|melt|wide-to-long|fuzzy-join|fuzzyjoin|fuzzy|concat|stack|union-all|generate|mock|fake|synth|mask|anonymize|redact|test|assert|check|serve|api|http|report|summary-html|fetch|http-get|curl-stream)
|
|
112
|
+
_files
|
|
113
|
+
;;
|
|
114
|
+
completion)
|
|
115
|
+
local -a shells
|
|
116
|
+
shells=('zsh:Zsh completion' 'bash:Bash completion' 'fish:Fish completion')
|
|
117
|
+
_describe -t shells 'shell' shells
|
|
118
|
+
;;
|
|
119
|
+
*)
|
|
120
|
+
_files
|
|
121
|
+
;;
|
|
122
|
+
esac
|
|
123
|
+
;;
|
|
124
|
+
esac
|
|
125
|
+
}
|
|
126
|
+
|
|
127
|
+
_rowpipe "$@"
|
|
128
|
+
`;
|
|
129
|
+
}
|
|
130
|
+
export function generateBashCompletion() {
|
|
131
|
+
return `#!/usr/bin/env bash
|
|
132
|
+
|
|
133
|
+
_rowpipe_completions() {
|
|
134
|
+
local cur prev commands
|
|
135
|
+
cur="\${COMP_WORDS[COMP_CWORD]}"
|
|
136
|
+
prev="\${COMP_WORDS[COMP_CWORD-1]}"
|
|
137
|
+
|
|
138
|
+
commands="inspect convert schema stats select rename cast filter map reduce sample validate diff files diff-files limit offset head tail sort top unique count group db join window profile clean explain view explode flatten freq plot chart table completion partition split timeseries corr quantiles percentiles outliers anomalies crosstab regression trend rfm cohort funnel abtest pareto technical indicators cluster kmeans entropy importance ngrams tokens pivot pivot-table crosstab-pivot unpivot melt wide-to-long fuzzy-join fuzzyjoin fuzzy concat stack union-all generate mock fake synth mask anonymize redact test assert check serve api http report summary-html fetch http-get curl-stream"
|
|
139
|
+
|
|
140
|
+
if [ $COMP_CWORD -eq 1 ]; then
|
|
141
|
+
COMPREPLY=( $(compgen -W "$commands" -- "$cur") )
|
|
142
|
+
return 0
|
|
143
|
+
fi
|
|
144
|
+
|
|
145
|
+
case "$prev" in
|
|
146
|
+
--from|--to)
|
|
147
|
+
COMPREPLY=( $(compgen -W "csv tsv psv json jsonl parquet xlsx markdown table db" -- "$cur") )
|
|
148
|
+
return 0
|
|
149
|
+
;;
|
|
150
|
+
completion)
|
|
151
|
+
COMPREPLY=( $(compgen -W "zsh bash fish" -- "$cur") )
|
|
152
|
+
return 0
|
|
153
|
+
;;
|
|
154
|
+
*)
|
|
155
|
+
COMPREPLY=( $(compgen -f -- "$cur") )
|
|
156
|
+
return 0
|
|
157
|
+
;;
|
|
158
|
+
esac
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
complete -F _rowpipe_completions rowpipe
|
|
162
|
+
`;
|
|
163
|
+
}
|
|
164
|
+
export function generateFishCompletion() {
|
|
165
|
+
return `# Fish completion for rowpipe
|
|
166
|
+
complete -c rowpipe -f
|
|
167
|
+
|
|
168
|
+
set -l commands inspect convert schema stats select rename cast filter map reduce sample validate diff files diff-files limit offset head tail sort top unique count group db join window profile clean explain view explode flatten freq plot chart table completion partition split timeseries corr quantiles percentiles outliers anomalies crosstab regression trend rfm cohort funnel abtest pareto technical indicators cluster kmeans entropy importance ngrams tokens pivot pivot-table crosstab-pivot unpivot melt wide-to-long fuzzy-join fuzzyjoin fuzzy concat stack union-all generate mock fake synth mask anonymize redact test assert check serve api http report summary-html fetch http-get curl-stream
|
|
169
|
+
|
|
170
|
+
for cmd in $commands
|
|
171
|
+
complete -c rowpipe -n "not __fish_seen_subcommand_from $commands" -a $cmd
|
|
172
|
+
end
|
|
173
|
+
|
|
174
|
+
complete -c rowpipe -n "__fish_seen_subcommand_from completion" -a "zsh bash fish"
|
|
175
|
+
complete -c rowpipe -l from -d "Input format" -a "csv tsv psv json jsonl parquet xlsx"
|
|
176
|
+
complete -c rowpipe -l to -d "Output format" -a "csv tsv psv json jsonl parquet xlsx markdown table"
|
|
177
|
+
complete -c rowpipe -l json -d "Output JSON"
|
|
178
|
+
complete -c rowpipe -l help -s h -d "Show help"
|
|
179
|
+
complete -c rowpipe -l version -s V -d "Show version"
|
|
180
|
+
`;
|
|
181
|
+
}
|
|
182
|
+
export function generateCompletion(shell) {
|
|
183
|
+
switch (shell.toLowerCase()) {
|
|
184
|
+
case "zsh":
|
|
185
|
+
return generateZshCompletion();
|
|
186
|
+
case "bash":
|
|
187
|
+
return generateBashCompletion();
|
|
188
|
+
case "fish":
|
|
189
|
+
return generateFishCompletion();
|
|
190
|
+
default:
|
|
191
|
+
throw new Error(`Unsupported shell: "${shell}". Supported shells: zsh, bash, fish`);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../src/cli/completion.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,qBAAqB;IACnC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA8HR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+BR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,sBAAsB;IACpC,OAAO;;;;;;;;;;;;;;;CAeR,CAAC;AACF,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,QAAQ,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QAC5B,KAAK,KAAK;YACR,OAAO,qBAAqB,EAAE,CAAC;QACjC,KAAK,MAAM;YACT,OAAO,sBAAsB,EAAE,CAAC;QAClC,KAAK,MAAM;YACT,OAAO,sBAAsB,EAAE,CAAC;QAClC;YACE,MAAM,IAAI,KAAK,CAAC,uBAAuB,KAAK,sCAAsC,CAAC,CAAC;IACxF,CAAC;AACH,CAAC"}
|