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,66 @@
|
|
|
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 { computeCohort } from "../../analytics/cohort.js";
|
|
7
|
+
import { formatTable } from "../../writers/table.js";
|
|
8
|
+
export async function cohortCommand(inputPath = "-", options = {}) {
|
|
9
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
10
|
+
const progress = new ProgressReporter(options);
|
|
11
|
+
let fromFormat = options.from?.toLowerCase();
|
|
12
|
+
if (!fromFormat && inputPath !== "-") {
|
|
13
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
14
|
+
}
|
|
15
|
+
if (!fromFormat)
|
|
16
|
+
fromFormat = "csv";
|
|
17
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
18
|
+
const reader = createReader(readerInput, {
|
|
19
|
+
format: fromFormat,
|
|
20
|
+
sheet: options.sheet,
|
|
21
|
+
delimiter: options.delimiter,
|
|
22
|
+
filePath: inputPath,
|
|
23
|
+
...options,
|
|
24
|
+
batchSize: effectiveBatchSize,
|
|
25
|
+
});
|
|
26
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
27
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
28
|
+
const result = await computeCohort(pipeline.batches(), {
|
|
29
|
+
userIdCol: options.userId || options.userIdCol,
|
|
30
|
+
timeCol: options.timeCol,
|
|
31
|
+
interval: options.interval || "1mo",
|
|
32
|
+
percent: options.counts ? false : options.percent ?? true,
|
|
33
|
+
maxPeriods: options.maxPeriods ?? 12,
|
|
34
|
+
});
|
|
35
|
+
progress.done();
|
|
36
|
+
const rows = result.formattedRows;
|
|
37
|
+
const isStructuredOutput = Boolean(options.to || options.output || options.json);
|
|
38
|
+
if (isStructuredOutput) {
|
|
39
|
+
let toFormat = options.to?.toLowerCase();
|
|
40
|
+
if (options.json) {
|
|
41
|
+
toFormat = "json";
|
|
42
|
+
}
|
|
43
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
44
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
45
|
+
}
|
|
46
|
+
if (!toFormat)
|
|
47
|
+
toFormat = "csv";
|
|
48
|
+
const writer = createWriter(options.output || "-", {
|
|
49
|
+
format: toFormat,
|
|
50
|
+
delimiter: options.delimiter,
|
|
51
|
+
...options,
|
|
52
|
+
});
|
|
53
|
+
async function* singleBatch() {
|
|
54
|
+
yield { rows, offset: 0 };
|
|
55
|
+
}
|
|
56
|
+
await writer.write(singleBatch());
|
|
57
|
+
if (writer.close)
|
|
58
|
+
await writer.close();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
process.stdout.write(`\n--- User Retention Cohort Matrix (Interval: ${result.interval}, Cohorts: ${result.cohorts.length}) ---\n`);
|
|
62
|
+
process.stdout.write(formatTable(rows, { style: "unicode" }));
|
|
63
|
+
process.stdout.write("\n");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
//# sourceMappingURL=cohort.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cohort.js","sourceRoot":"","sources":["../../../src/cli/commands/cohort.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,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;AAE3D,OAAO,EAAE,aAAa,EAA2C,MAAM,2BAA2B,CAAC;AACnG,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AAWrD,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,SAAS,GAAG,GAAG,EACf,UAAgC,EAAE;IAElC,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,aAAa,CAAC,QAAQ,CAAC,OAAO,EAAE,EAAE;QACrD,SAAS,EAAE,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,SAAS;QAC9C,OAAO,EAAE,OAAO,CAAC,OAAO;QACxB,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,KAAK;QACnC,OAAO,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,IAAI,IAAI;QACzD,UAAU,EAAE,OAAO,CAAC,UAAU,IAAI,EAAE;KACrC,CAAC,CAAC;IACH,QAAQ,CAAC,IAAI,EAAE,CAAC;IAEhB,MAAM,IAAI,GAAG,MAAM,CAAC,aAAa,CAAC;IAElC,MAAM,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC,EAAE,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IACjF,IAAI,kBAAkB,EAAE,CAAC;QACvB,IAAI,QAAQ,GAAG,OAAO,CAAC,EAAE,EAAE,WAAW,EAAE,CAAC;QACzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;YACjB,QAAQ,GAAG,MAAM,CAAC;QACpB,CAAC;aAAM,IAAI,CAAC,QAAQ,IAAI,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;YACjE,QAAQ,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,SAAS,CAAC;QAC5D,CAAC;QACD,IAAI,CAAC,QAAQ;YAAE,QAAQ,GAAG,KAAK,CAAC;QAEhC,MAAM,MAAM,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE;YACjD,MAAM,EAAE,QAAQ;YAChB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,GAAG,OAAO;SACX,CAAC,CAAC;QAEH,KAAK,SAAS,CAAC,CAAC,WAAW;YACzB,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;QAC5B,CAAC;QACD,MAAM,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,KAAK;YAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACzC,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,iDAAiD,MAAM,CAAC,QAAQ,cAAc,MAAM,CAAC,OAAO,CAAC,MAAM,SAAS,CAAC,CAAC;QACnI,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC;QAC9D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC7B,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,wBAAwB;IACvC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED,wBAAsB,iBAAiB,CACrC,KAAK,SAAQ,EACb,QAAQ,GAAE,wBAA6B,GACtC,OAAO,CAAC,IAAI,CAAC,CAIf"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { generateCompletion } from "../completion.js";
|
|
2
|
+
export async function completionCommand(shell = "zsh", _options = {}) {
|
|
3
|
+
const normalized = (shell || "zsh").toLowerCase();
|
|
4
|
+
const script = generateCompletion(normalized);
|
|
5
|
+
process.stdout.write(script);
|
|
6
|
+
}
|
|
7
|
+
//# sourceMappingURL=completion.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"completion.js","sourceRoot":"","sources":["../../../src/cli/commands/completion.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAMtD,MAAM,CAAC,KAAK,UAAU,iBAAiB,CACrC,KAAK,GAAG,KAAK,EACb,WAAqC,EAAE;IAEvC,MAAM,UAAU,GAAG,CAAC,KAAK,IAAI,KAAK,CAAC,CAAC,WAAW,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,kBAAkB,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface ConcatCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
sourceCol?: string;
|
|
4
|
+
sourceColumn?: string;
|
|
5
|
+
source?: string;
|
|
6
|
+
align?: "union" | "intersect";
|
|
7
|
+
}
|
|
8
|
+
export declare function concatCommand(files: string[], options?: ConcatCommandOptions): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=concat.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concat.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/concat.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,oBAAqB,SAAQ,yBAAyB;IACrE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,GAAG,WAAW,CAAC;CAC/B;AAED,wBAAsB,aAAa,CACjC,KAAK,EAAE,MAAM,EAAE,EACf,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
|
@@ -0,0 +1,62 @@
|
|
|
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 { concatReaders } from "../../transforms/concat.js";
|
|
6
|
+
import { InvalidArgumentError } from "../../core/errors.js";
|
|
7
|
+
export async function concatCommand(files, options = {}) {
|
|
8
|
+
if (!files || files.length === 0) {
|
|
9
|
+
throw new InvalidArgumentError("Usage: rowpipe concat <file1> <file2> [file3...] [options]");
|
|
10
|
+
}
|
|
11
|
+
const progress = new ProgressReporter(options);
|
|
12
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
13
|
+
const sourceCol = options.sourceCol || options.sourceColumn || options.source;
|
|
14
|
+
const sources = [];
|
|
15
|
+
for (const file of files) {
|
|
16
|
+
let fromFormat = options.from?.toLowerCase();
|
|
17
|
+
if (!fromFormat && file !== "-") {
|
|
18
|
+
fromFormat = inferReaderFormat(file) ?? undefined;
|
|
19
|
+
}
|
|
20
|
+
if (!fromFormat)
|
|
21
|
+
fromFormat = "csv";
|
|
22
|
+
const readerInput = file === "-" ? openReadableStream("-", options) : file;
|
|
23
|
+
const reader = createReader(readerInput, {
|
|
24
|
+
format: fromFormat,
|
|
25
|
+
sheet: options.sheet,
|
|
26
|
+
delimiter: options.delimiter,
|
|
27
|
+
filePath: file,
|
|
28
|
+
...options,
|
|
29
|
+
batchSize: effectiveBatchSize,
|
|
30
|
+
});
|
|
31
|
+
sources.push({
|
|
32
|
+
reader,
|
|
33
|
+
label: file,
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
const concatReader = concatReaders(sources, {
|
|
37
|
+
sourceCol,
|
|
38
|
+
align: options.align,
|
|
39
|
+
batchSize: effectiveBatchSize,
|
|
40
|
+
});
|
|
41
|
+
let toFormat = options.to?.toLowerCase();
|
|
42
|
+
if (options.json) {
|
|
43
|
+
toFormat = "json";
|
|
44
|
+
}
|
|
45
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
46
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
47
|
+
}
|
|
48
|
+
if (!toFormat)
|
|
49
|
+
toFormat = "csv";
|
|
50
|
+
const writer = createWriter(options.output || "-", {
|
|
51
|
+
format: toFormat,
|
|
52
|
+
delimiter: options.delimiter,
|
|
53
|
+
...options,
|
|
54
|
+
});
|
|
55
|
+
await writer.write(concatReader.read());
|
|
56
|
+
if (writer.close)
|
|
57
|
+
await writer.close();
|
|
58
|
+
if (concatReader.close)
|
|
59
|
+
await concatReader.close();
|
|
60
|
+
progress.done();
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=concat.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"concat.js","sourceRoot":"","sources":["../../../src/cli/commands/concat.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,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,aAAa,EAAqB,MAAM,4BAA4B,CAAC;AAC9E,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAU5D,MAAM,CAAC,KAAK,UAAU,aAAa,CACjC,KAAe,EACf,UAAgC,EAAE;IAElC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACjC,MAAM,IAAI,oBAAoB,CAAC,4DAA4D,CAAC,CAAC;IAC/F,CAAC;IAED,MAAM,QAAQ,GAAG,IAAI,gBAAgB,CAAC,OAAO,CAAC,CAAC;IAC/C,MAAM,kBAAkB,GAAG,MAAM,CAAC,OAAO,CAAC,SAAS,CAAC,IAAI,IAAI,CAAC;IAC7D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,MAAM,CAAC;IAE9E,MAAM,OAAO,GAAmB,EAAE,CAAC;IAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,WAAW,EAAE,CAAC;QAC7C,IAAI,CAAC,UAAU,IAAI,IAAI,KAAK,GAAG,EAAE,CAAC;YAChC,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC;QACpD,CAAC;QACD,IAAI,CAAC,UAAU;YAAE,UAAU,GAAG,KAAK,CAAC;QAEpC,MAAM,WAAW,GAAG,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC,kBAAkB,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QAC3E,MAAM,MAAM,GAAG,YAAY,CAAC,WAAW,EAAE;YACvC,MAAM,EAAE,UAAU;YAClB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,QAAQ,EAAE,IAAI;YACd,GAAG,OAAO;YACV,SAAS,EAAE,kBAAkB;SAC9B,CAAC,CAAC;QAEH,OAAO,CAAC,IAAI,CAAC;YACX,MAAM;YACN,KAAK,EAAE,IAAI;SACZ,CAAC,CAAC;IACL,CAAC;IAED,MAAM,YAAY,GAAG,aAAa,CAAC,OAAO,EAAE;QAC1C,SAAS;QACT,KAAK,EAAE,OAAO,CAAC,KAAK;QACpB,SAAS,EAAE,kBAAkB;KAC9B,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,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,CAAC,CAAC;IACxC,IAAI,MAAM,CAAC,KAAK;QAAE,MAAM,MAAM,CAAC,KAAK,EAAE,CAAC;IACvC,IAAI,YAAY,CAAC,KAAK;QAAE,MAAM,YAAY,CAAC,KAAK,EAAE,CAAC;IACnD,QAAQ,CAAC,IAAI,EAAE,CAAC;AAClB,CAAC"}
|
|
@@ -16,6 +16,8 @@ export interface ConvertCommandOptions {
|
|
|
16
16
|
batchSize?: string | number;
|
|
17
17
|
quiet?: boolean;
|
|
18
18
|
noProgress?: boolean;
|
|
19
|
+
onError?: "abort" | "skip" | "log";
|
|
20
|
+
badRowsLog?: string;
|
|
19
21
|
}
|
|
20
22
|
export declare function convertCommand(inputPath?: string, outputPath?: string, options?: ConvertCommandOptions): Promise<void>;
|
|
21
23
|
//# sourceMappingURL=convert.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/convert.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"convert.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/convert.ts"],"names":[],"mappings":"AAUA,MAAM,WAAW,qBAAqB;IACpC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,EAAE,OAAO,GAAG,MAAM,GAAG,KAAK,CAAC;IACnC,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,wBAAsB,cAAc,CAClC,SAAS,SAAM,EACf,UAAU,CAAC,EAAE,MAAM,EACnB,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAmGf"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/cli/commands/convert.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChG,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,YAAY,EAAE,mBAAmB,IAAI,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAEhG,OAAO,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AACzE,OAAO,EAAE,gBAAgB,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"convert.js","sourceRoot":"","sources":["../../../src/cli/commands/convert.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface CorrCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
cols?: string | string[];
|
|
4
|
+
columns?: string | string[];
|
|
5
|
+
}
|
|
6
|
+
export declare function corrCommand(inputPath?: string, options?: CorrCommandOptions): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=corr.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corr.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/corr.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,kBAAmB,SAAQ,yBAAyB;IACnE,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;CAC7B;AAED,wBAAsB,WAAW,CAC/B,SAAS,SAAM,EACf,OAAO,GAAE,kBAAuB,GAC/B,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
|
@@ -0,0 +1,70 @@
|
|
|
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 { computeCorrelationMatrix, formatCorrelationRows } from "../../analytics/correlation.js";
|
|
8
|
+
import { formatTable } from "../../writers/table.js";
|
|
9
|
+
export async function corrCommand(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 rawCols = options.cols || options.columns;
|
|
28
|
+
const targetCols = rawCols
|
|
29
|
+
? Array.isArray(rawCols)
|
|
30
|
+
? rawCols.flatMap((c) => c.split(",").map((s) => s.trim()))
|
|
31
|
+
: rawCols.split(",").map((s) => s.trim())
|
|
32
|
+
: undefined;
|
|
33
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
34
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
35
|
+
const result = await computeCorrelationMatrix(pipeline.batches(), targetCols);
|
|
36
|
+
progress.done();
|
|
37
|
+
if (result.columns.length === 0) {
|
|
38
|
+
throw new Error("No numeric columns found for correlation analysis.");
|
|
39
|
+
}
|
|
40
|
+
const rows = formatCorrelationRows(result);
|
|
41
|
+
const isStructuredOutput = Boolean(options.to || options.output || options.json);
|
|
42
|
+
if (isStructuredOutput) {
|
|
43
|
+
let toFormat = options.to?.toLowerCase();
|
|
44
|
+
if (options.json) {
|
|
45
|
+
toFormat = "json";
|
|
46
|
+
}
|
|
47
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
48
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
49
|
+
}
|
|
50
|
+
if (!toFormat)
|
|
51
|
+
toFormat = "csv";
|
|
52
|
+
const writer = createWriter(options.output || "-", {
|
|
53
|
+
format: toFormat,
|
|
54
|
+
delimiter: options.delimiter,
|
|
55
|
+
...options,
|
|
56
|
+
});
|
|
57
|
+
async function* singleBatch() {
|
|
58
|
+
yield { rows, offset: 0 };
|
|
59
|
+
}
|
|
60
|
+
await writer.write(singleBatch());
|
|
61
|
+
if (writer.close)
|
|
62
|
+
await writer.close();
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
process.stdout.write(`\n--- Pearson Correlation Matrix (Sample size: ${formatNumber(result.sampleSize)} rows) ---\n`);
|
|
66
|
+
process.stdout.write(formatTable(rows, { style: "unicode" }));
|
|
67
|
+
process.stdout.write("\n");
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
//# sourceMappingURL=corr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"corr.js","sourceRoot":"","sources":["../../../src/cli/commands/corr.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface CrosstabCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
row?: string;
|
|
4
|
+
col?: string;
|
|
5
|
+
top?: string | number;
|
|
6
|
+
topRows?: string | number;
|
|
7
|
+
topCols?: string | number;
|
|
8
|
+
normalize?: "row" | "col" | "all";
|
|
9
|
+
}
|
|
10
|
+
export declare function crosstabCommand(inputPath?: string, rowCol?: string, colCol?: string, options?: CrosstabCommandOptions): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=crosstab.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crosstab.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/crosstab.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,sBAAuB,SAAQ,yBAAyB;IACvE,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,GAAG,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC1B,SAAS,CAAC,EAAE,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC;CACnC;AAED,wBAAsB,eAAe,CACnC,SAAS,SAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,MAAM,CAAC,EAAE,MAAM,EACf,OAAO,GAAE,sBAA2B,GACnC,OAAO,CAAC,IAAI,CAAC,CAsEf"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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 { computeCrosstab, formatCrosstabRows } from "../../analytics/crosstab.js";
|
|
8
|
+
import { formatTable } from "../../writers/table.js";
|
|
9
|
+
export async function crosstabCommand(inputPath = "-", rowCol, colCol, options = {}) {
|
|
10
|
+
const rCol = rowCol || options.row;
|
|
11
|
+
const cCol = colCol || options.col;
|
|
12
|
+
if (!rCol || !cCol) {
|
|
13
|
+
throw new Error("Both row and column dimensions are required for crosstab (e.g. rowpipe crosstab netflix.csv type rating)");
|
|
14
|
+
}
|
|
15
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
16
|
+
const progress = new ProgressReporter(options);
|
|
17
|
+
let fromFormat = options.from?.toLowerCase();
|
|
18
|
+
if (!fromFormat && inputPath !== "-") {
|
|
19
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
20
|
+
}
|
|
21
|
+
if (!fromFormat)
|
|
22
|
+
fromFormat = "csv";
|
|
23
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
24
|
+
const reader = createReader(readerInput, {
|
|
25
|
+
format: fromFormat,
|
|
26
|
+
sheet: options.sheet,
|
|
27
|
+
delimiter: options.delimiter,
|
|
28
|
+
filePath: inputPath,
|
|
29
|
+
...options,
|
|
30
|
+
batchSize: effectiveBatchSize,
|
|
31
|
+
});
|
|
32
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize });
|
|
33
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
34
|
+
const topLimit = options.top !== undefined ? Number(options.top) : undefined;
|
|
35
|
+
const result = await computeCrosstab(pipeline.batches(), rCol, cCol, {
|
|
36
|
+
topRows: options.topRows !== undefined ? Number(options.topRows) : topLimit,
|
|
37
|
+
topCols: options.topCols !== undefined ? Number(options.topCols) : topLimit,
|
|
38
|
+
normalize: options.normalize,
|
|
39
|
+
});
|
|
40
|
+
progress.done();
|
|
41
|
+
const formattedRows = formatCrosstabRows(result, options.normalize);
|
|
42
|
+
const isStructuredOutput = Boolean(options.to || options.output || options.json);
|
|
43
|
+
if (isStructuredOutput) {
|
|
44
|
+
let toFormat = options.to?.toLowerCase();
|
|
45
|
+
if (options.json) {
|
|
46
|
+
toFormat = "json";
|
|
47
|
+
}
|
|
48
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
49
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
50
|
+
}
|
|
51
|
+
if (!toFormat)
|
|
52
|
+
toFormat = "csv";
|
|
53
|
+
const writer = createWriter(options.output || "-", {
|
|
54
|
+
format: toFormat,
|
|
55
|
+
delimiter: options.delimiter,
|
|
56
|
+
...options,
|
|
57
|
+
});
|
|
58
|
+
async function* singleBatch() {
|
|
59
|
+
yield { rows: formattedRows, offset: 0 };
|
|
60
|
+
}
|
|
61
|
+
await writer.write(singleBatch());
|
|
62
|
+
if (writer.close)
|
|
63
|
+
await writer.close();
|
|
64
|
+
}
|
|
65
|
+
else {
|
|
66
|
+
process.stdout.write(`\n--- Cross-Tabulation: ${rCol} × ${cCol} (Grand Total: ${formatNumber(result.grandTotal)} | Chi-Square: ${result.chiSquare.toFixed(2)}, df: ${result.degreesOfFreedom}) ---\n`);
|
|
67
|
+
process.stdout.write(formatTable(formattedRows, { style: "unicode" }));
|
|
68
|
+
process.stdout.write("\n");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=crosstab.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crosstab.js","sourceRoot":"","sources":["../../../src/cli/commands/crosstab.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type EntropyOptions } from "../../analytics/entropy.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface EntropyCommandOptions extends UnifiedPipelineCliOptions, EntropyOptions {
|
|
4
|
+
target?: string;
|
|
5
|
+
cols?: string | string[];
|
|
6
|
+
bins?: number;
|
|
7
|
+
}
|
|
8
|
+
export declare function entropyCommand(inputPath?: string, options?: EntropyCommandOptions): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=entropy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entropy.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/entropy.ts"],"names":[],"mappings":"AAMA,OAAO,EAAkB,KAAK,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAEjF,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,qBAAsB,SAAQ,yBAAyB,EAAE,cAAc;IACtF,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,GAAG,MAAM,EAAE,CAAC;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,wBAAsB,cAAc,CAClC,SAAS,SAAM,EACf,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CAiEf"}
|
|
@@ -0,0 +1,71 @@
|
|
|
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 { computeEntropy } from "../../analytics/entropy.js";
|
|
8
|
+
import { formatTable } from "../../writers/table.js";
|
|
9
|
+
export async function entropyCommand(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 computeEntropy(pipeline.batches(), {
|
|
30
|
+
targetCol: options.target || options.targetCol,
|
|
31
|
+
cols: options.cols,
|
|
32
|
+
bins: options.bins ? Number(options.bins) : 10,
|
|
33
|
+
});
|
|
34
|
+
progress.done();
|
|
35
|
+
if (options.json) {
|
|
36
|
+
console.log(JSON.stringify(result, null, 2));
|
|
37
|
+
return;
|
|
38
|
+
}
|
|
39
|
+
const rows = result.formattedRows;
|
|
40
|
+
const isStructuredOutput = Boolean(options.to || options.output);
|
|
41
|
+
if (isStructuredOutput) {
|
|
42
|
+
let toFormat = options.to?.toLowerCase();
|
|
43
|
+
if (!toFormat && options.output && options.output !== "-") {
|
|
44
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
45
|
+
}
|
|
46
|
+
if (!toFormat)
|
|
47
|
+
toFormat = "csv";
|
|
48
|
+
const writer = createWriter(options.output || "-", {
|
|
49
|
+
format: toFormat,
|
|
50
|
+
delimiter: options.delimiter,
|
|
51
|
+
...options,
|
|
52
|
+
});
|
|
53
|
+
async function* singleBatch() {
|
|
54
|
+
yield { rows, offset: 0 };
|
|
55
|
+
}
|
|
56
|
+
await writer.write(singleBatch());
|
|
57
|
+
if (writer.close)
|
|
58
|
+
await writer.close();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
if (result.target_column) {
|
|
62
|
+
process.stdout.write(`\n--- Feature Importance & Information Gain (Target: '${result.target_column}', Target Entropy: ${result.target_entropy} bits, Samples: ${formatNumber(result.total_samples)}) ---\n`);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
process.stdout.write(`\n--- Column Shannon Entropy Analysis (Samples: ${formatNumber(result.total_samples)}) ---\n`);
|
|
66
|
+
}
|
|
67
|
+
process.stdout.write(formatTable(rows, { style: "unicode" }));
|
|
68
|
+
process.stdout.write("\n");
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
//# sourceMappingURL=entropy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"entropy.js","sourceRoot":"","sources":["../../../src/cli/commands/entropy.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
2
|
+
export interface ExplodeCommandOptions extends UnifiedPipelineCliOptions {
|
|
3
|
+
delimiter?: string;
|
|
4
|
+
noTrim?: boolean;
|
|
5
|
+
preserveEmpty?: boolean;
|
|
6
|
+
}
|
|
7
|
+
export declare function explodeCommand(inputPath: string | undefined, column: string, options?: ExplodeCommandOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=explode.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explode.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/explode.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,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,wBAAsB,cAAc,CAClC,SAAS,oBAAM,EACf,MAAM,EAAE,MAAM,EACd,OAAO,GAAE,qBAA0B,GAClC,OAAO,CAAC,IAAI,CAAC,CA0Df"}
|
|
@@ -0,0 +1,61 @@
|
|
|
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 { explodeRows } from "../../transforms/explode.js";
|
|
7
|
+
export async function explodeCommand(inputPath = "-", column, options = {}) {
|
|
8
|
+
if (!column || column.trim().length === 0) {
|
|
9
|
+
throw new Error("Column name to explode is required (e.g. rowpipe explode data.csv country)");
|
|
10
|
+
}
|
|
11
|
+
const effectiveBatchSize = Number(options.batchSize) || 1000;
|
|
12
|
+
const progress = new ProgressReporter(options);
|
|
13
|
+
let fromFormat = options.from?.toLowerCase();
|
|
14
|
+
if (!fromFormat && inputPath !== "-") {
|
|
15
|
+
fromFormat = inferReaderFormat(inputPath) ?? undefined;
|
|
16
|
+
}
|
|
17
|
+
if (!fromFormat)
|
|
18
|
+
fromFormat = "csv";
|
|
19
|
+
let toFormat = options.to?.toLowerCase();
|
|
20
|
+
if (options.json) {
|
|
21
|
+
toFormat = "json";
|
|
22
|
+
}
|
|
23
|
+
else if (!toFormat && options.output && options.output !== "-") {
|
|
24
|
+
toFormat = inferWriterFormat(options.output) ?? undefined;
|
|
25
|
+
}
|
|
26
|
+
if (!toFormat)
|
|
27
|
+
toFormat = fromFormat === "xlsx" ? "csv" : fromFormat;
|
|
28
|
+
const readerInput = inputPath === "-" ? openReadableStream("-", options) : inputPath;
|
|
29
|
+
const reader = createReader(readerInput, {
|
|
30
|
+
format: fromFormat,
|
|
31
|
+
sheet: options.sheet,
|
|
32
|
+
delimiter: options.delimiter,
|
|
33
|
+
filePath: inputPath,
|
|
34
|
+
...options,
|
|
35
|
+
batchSize: effectiveBatchSize,
|
|
36
|
+
});
|
|
37
|
+
const writer = createWriter(options.output || "-", {
|
|
38
|
+
format: toFormat,
|
|
39
|
+
delimiter: options.delimiter,
|
|
40
|
+
...options,
|
|
41
|
+
});
|
|
42
|
+
const pipeline = createPipeline(reader, { batchSize: effectiveBatchSize })
|
|
43
|
+
.pipe(explodeRows({
|
|
44
|
+
column,
|
|
45
|
+
delimiter: options.delimiter ?? ",",
|
|
46
|
+
trim: options.noTrim !== true,
|
|
47
|
+
dropEmpty: options.preserveEmpty !== true,
|
|
48
|
+
}));
|
|
49
|
+
pipeline.onProgress((info) => progress.update(info));
|
|
50
|
+
try {
|
|
51
|
+
await pipeline.to(writer);
|
|
52
|
+
}
|
|
53
|
+
finally {
|
|
54
|
+
if (reader.close)
|
|
55
|
+
await reader.close();
|
|
56
|
+
if (writer.close)
|
|
57
|
+
await writer.close();
|
|
58
|
+
}
|
|
59
|
+
progress.done();
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=explode.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"explode.js","sourceRoot":"","sources":["../../../src/cli/commands/explode.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { type HttpFetchOptions } from "../../dataops/fetch.js";
|
|
2
|
+
import type { UnifiedPipelineCliOptions } from "./pipeline.js";
|
|
3
|
+
export interface FetchCommandOptions extends Omit<UnifiedPipelineCliOptions, "batchSize">, Omit<HttpFetchOptions, "batchSize"> {
|
|
4
|
+
batchSize?: number | string;
|
|
5
|
+
headersList?: string[];
|
|
6
|
+
}
|
|
7
|
+
export declare function fetchCommand(url: string, options?: FetchCommandOptions): Promise<void>;
|
|
8
|
+
//# sourceMappingURL=fetch.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/fetch.ts"],"names":[],"mappings":"AAAA,OAAO,EAAc,KAAK,gBAAgB,EAAE,MAAM,wBAAwB,CAAC;AAG3E,OAAO,KAAK,EAAE,yBAAyB,EAAE,MAAM,eAAe,CAAC;AAE/D,MAAM,WAAW,mBAAoB,SAAQ,IAAI,CAAC,yBAAyB,EAAE,WAAW,CAAC,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC;IAC5H,SAAS,CAAC,EAAE,MAAM,GAAG,MAAM,CAAC;IAC5B,WAAW,CAAC,EAAE,MAAM,EAAE,CAAC;CACxB;AAED,wBAAsB,YAAY,CAChC,GAAG,EAAE,MAAM,EACX,OAAO,GAAE,mBAAwB,GAChC,OAAO,CAAC,IAAI,CAAC,CAsCf"}
|