rowpipe 1.1.0 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +302 -9
- package/dist/cli/commands/diff.d.ts +30 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +143 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/files.d.ts +35 -0
- package/dist/cli/commands/files.d.ts.map +1 -0
- package/dist/cli/commands/files.js +93 -0
- package/dist/cli/commands/files.js.map +1 -0
- package/dist/cli/index.js +85 -1
- package/dist/cli/index.js.map +1 -1
- package/dist/core/errors.d.ts +23 -0
- package/dist/core/errors.d.ts.map +1 -1
- package/dist/core/errors.js +38 -0
- package/dist/core/errors.js.map +1 -1
- package/dist/core/types.d.ts +2 -0
- package/dist/core/types.d.ts.map +1 -1
- package/dist/diff/comparator.d.ts +17 -0
- package/dist/diff/comparator.d.ts.map +1 -0
- package/dist/diff/comparator.js +158 -0
- package/dist/diff/comparator.js.map +1 -0
- package/dist/diff/engine.d.ts +10 -0
- package/dist/diff/engine.d.ts.map +1 -0
- package/dist/diff/engine.js +333 -0
- package/dist/diff/engine.js.map +1 -0
- package/dist/diff/hash.d.ts +6 -0
- package/dist/diff/hash.d.ts.map +1 -0
- package/dist/diff/hash.js +50 -0
- package/dist/diff/hash.js.map +1 -0
- package/dist/diff/key.d.ts +21 -0
- package/dist/diff/key.d.ts.map +1 -0
- package/dist/diff/key.js +107 -0
- package/dist/diff/key.js.map +1 -0
- package/dist/diff/reporter.d.ts +18 -0
- package/dist/diff/reporter.d.ts.map +1 -0
- package/dist/diff/reporter.js +133 -0
- package/dist/diff/reporter.js.map +1 -0
- package/dist/diff/schema.d.ts +7 -0
- package/dist/diff/schema.d.ts.map +1 -0
- package/dist/diff/schema.js +65 -0
- package/dist/diff/schema.js.map +1 -0
- package/dist/diff/storage/disk-index.d.ts +28 -0
- package/dist/diff/storage/disk-index.d.ts.map +1 -0
- package/dist/diff/storage/disk-index.js +105 -0
- package/dist/diff/storage/disk-index.js.map +1 -0
- package/dist/diff/storage/memory-index.d.ts +23 -0
- package/dist/diff/storage/memory-index.d.ts.map +1 -0
- package/dist/diff/storage/memory-index.js +69 -0
- package/dist/diff/storage/memory-index.js.map +1 -0
- package/dist/diff/storage/spillable-index.d.ts +30 -0
- package/dist/diff/storage/spillable-index.d.ts.map +1 -0
- package/dist/diff/storage/spillable-index.js +108 -0
- package/dist/diff/storage/spillable-index.js.map +1 -0
- package/dist/diff/types.d.ts +127 -0
- package/dist/diff/types.d.ts.map +1 -0
- package/dist/diff/types.js +2 -0
- package/dist/diff/types.js.map +1 -0
- package/dist/files/glob.d.ts +21 -0
- package/dist/files/glob.d.ts.map +1 -0
- package/dist/files/glob.js +132 -0
- package/dist/files/glob.js.map +1 -0
- package/dist/files/hash.d.ts +10 -0
- package/dist/files/hash.d.ts.map +1 -0
- package/dist/files/hash.js +67 -0
- package/dist/files/hash.js.map +1 -0
- package/dist/files/index.d.ts +6 -0
- package/dist/files/index.d.ts.map +1 -0
- package/dist/files/index.js +6 -0
- package/dist/files/index.js.map +1 -0
- package/dist/files/mime.d.ts +9 -0
- package/dist/files/mime.d.ts.map +1 -0
- package/dist/files/mime.js +128 -0
- package/dist/files/mime.js.map +1 -0
- package/dist/files/reader.d.ts +19 -0
- package/dist/files/reader.d.ts.map +1 -0
- package/dist/files/reader.js +344 -0
- package/dist/files/reader.js.map +1 -0
- package/dist/files/types.d.ts +47 -0
- package/dist/files/types.d.ts.map +1 -0
- package/dist/files/types.js +2 -0
- package/dist/files/types.js.map +1 -0
- package/dist/index.d.ts +16 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +18 -1
- package/dist/index.js.map +1 -1
- package/dist/readers/csv.d.ts.map +1 -1
- package/dist/readers/csv.js +39 -19
- package/dist/readers/csv.js.map +1 -1
- package/dist/readers/index.d.ts +1 -0
- package/dist/readers/index.d.ts.map +1 -1
- package/dist/readers/index.js +28 -0
- package/dist/readers/index.js.map +1 -1
- package/dist/transforms/expression.d.ts.map +1 -1
- package/dist/transforms/expression.js +73 -7
- package/dist/transforms/expression.js.map +1 -1
- package/dist/writers/csv.d.ts.map +1 -1
- package/dist/writers/csv.js +21 -7
- package/dist/writers/csv.js.map +1 -1
- package/package.json +4 -2
- package/skills/rowpipe/SKILL.md +82 -0
package/skills/rowpipe/SKILL.md
CHANGED
|
@@ -25,6 +25,8 @@ Rowpipe is a high-performance, stream-first command-line toolkit and Node.js lib
|
|
|
25
25
|
| **Cast** | `rowpipe cast <file> <col1:type> [--on-error null]` | Stream cast types (`integer`, `number`, `boolean`, `date`) |
|
|
26
26
|
| **Sample** | `rowpipe sample <file> --rows <n> [--seed <s>]` | Reservoir sampling with bounded memory |
|
|
27
27
|
| **Validate** | `rowpipe validate <file> --schema <schema.json>` | Validate stream against JSON schema definition |
|
|
28
|
+
| **Diff** | `rowpipe diff <left> <right> --key <cols> [opts]` | Stream compare datasets by key across formats with bounded RAM and disk spilling |
|
|
29
|
+
| **Files** | `rowpipe files <path> [--include <glob>] [opts]` | Stream filesystem directory as tabular records with bounded memory, globs, hashes, and MIME |
|
|
28
30
|
|
|
29
31
|
---
|
|
30
32
|
|
|
@@ -138,6 +140,57 @@ cat transactions.csv.gz | \
|
|
|
138
140
|
rowpipe convert - --to markdown
|
|
139
141
|
```
|
|
140
142
|
|
|
143
|
+
### 7. Dataset Diffing & Change Feeds (`diff`)
|
|
144
|
+
Compare two datasets by key across formats with bounded memory ($O(1)$) and automatic disk spilling:
|
|
145
|
+
|
|
146
|
+
```bash
|
|
147
|
+
# 1. Basic Keyed Diff
|
|
148
|
+
rowpipe diff yesterday.csv today.csv --key id
|
|
149
|
+
|
|
150
|
+
# 2. Composite Key & Cross-Format (CSV vs Parquet)
|
|
151
|
+
rowpipe diff old.csv new.parquet --key country,user_id
|
|
152
|
+
|
|
153
|
+
# 3. Multi-Sheet Excel Workbook Diff
|
|
154
|
+
rowpipe diff old.xlsx new.xlsx --sheet Users --key id
|
|
155
|
+
|
|
156
|
+
# 4. Filter Columns & String Normalization
|
|
157
|
+
rowpipe diff old.csv new.csv \
|
|
158
|
+
--key id \
|
|
159
|
+
--ignore updated_at,last_seen \
|
|
160
|
+
--trim \
|
|
161
|
+
--ignore-case \
|
|
162
|
+
--epsilon 0.001
|
|
163
|
+
|
|
164
|
+
# 5. Output Modes: Rows, JSONL Patch, and JSON
|
|
165
|
+
rowpipe diff old.csv new.csv --key id --format rows --only changed --limit 50
|
|
166
|
+
rowpipe diff old.csv new.csv --key id --format patch > changes.jsonl
|
|
167
|
+
rowpipe diff old.csv new.csv --key id --json
|
|
168
|
+
|
|
169
|
+
# 6. CI/CD Validation (Fails with exit code 1 if differences found)
|
|
170
|
+
rowpipe diff expected.csv actual.csv --key id --fail-on-diff
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
### 8. Filesystem as Streaming Tabular Records (`files`)
|
|
174
|
+
Stream files and directory trees with bounded memory, globs, streaming hashes, and MIME detection:
|
|
175
|
+
|
|
176
|
+
```bash
|
|
177
|
+
# 1. Stream directory records
|
|
178
|
+
rowpipe files ./src --include "**/*.ts"
|
|
179
|
+
|
|
180
|
+
# 2. Filter large files and select columns via Unix pipe
|
|
181
|
+
rowpipe files ./uploads | rowpipe filter - 'size > 1000000' | rowpipe select - relative_path,size
|
|
182
|
+
|
|
183
|
+
# 3. Stream SHA-256 or fast hashes
|
|
184
|
+
rowpipe files ./assets --hash sha256 --to jsonl
|
|
185
|
+
rowpipe files ./dataset --hash fast
|
|
186
|
+
|
|
187
|
+
# 4. Generate deterministic build snapshot
|
|
188
|
+
rowpipe files snapshot ./dist --hash sha256 --to jsonl > dist.snapshot.jsonl
|
|
189
|
+
|
|
190
|
+
# 5. Direct directory diffing
|
|
191
|
+
rowpipe files diff ./dist-v1 ./dist-v2 --hash sha256
|
|
192
|
+
```
|
|
193
|
+
|
|
141
194
|
---
|
|
142
195
|
|
|
143
196
|
## 💻 Node.js Library API
|
|
@@ -153,9 +206,12 @@ import {
|
|
|
153
206
|
ParquetWriter,
|
|
154
207
|
MarkdownWriter,
|
|
155
208
|
XLSXReader,
|
|
209
|
+
FileSystemReader,
|
|
156
210
|
mapRows,
|
|
157
211
|
filterRows,
|
|
158
212
|
reduceRows,
|
|
213
|
+
diffRows,
|
|
214
|
+
computeDiff,
|
|
159
215
|
} from "rowpipe";
|
|
160
216
|
import { createReadStream, createWriteStream } from "node:fs";
|
|
161
217
|
|
|
@@ -178,4 +234,30 @@ await createPipeline(reader)
|
|
|
178
234
|
],
|
|
179
235
|
}))
|
|
180
236
|
.to(writer);
|
|
237
|
+
|
|
238
|
+
// 2. Stream Filesystem Directory as Tabular Rows
|
|
239
|
+
const fsReader = new FileSystemReader({
|
|
240
|
+
root: "./src",
|
|
241
|
+
include: ["**/*.ts"],
|
|
242
|
+
hash: "sha256",
|
|
243
|
+
mime: true,
|
|
244
|
+
});
|
|
245
|
+
|
|
246
|
+
for await (const batch of fsReader.read()) {
|
|
247
|
+
for (const file of batch.rows) {
|
|
248
|
+
console.log(`${file.relative_path} (${file.size} bytes) - Hash: ${file.hash}`);
|
|
249
|
+
}
|
|
250
|
+
}
|
|
251
|
+
|
|
252
|
+
// 3. Streaming Diff Events
|
|
253
|
+
for await (const event of diffRows({
|
|
254
|
+
leftPath: "old.csv",
|
|
255
|
+
rightPath: "new.parquet",
|
|
256
|
+
keys: ["id"],
|
|
257
|
+
ignore: ["updated_at"],
|
|
258
|
+
})) {
|
|
259
|
+
if (event.type === "changed") {
|
|
260
|
+
console.log(`Row ${JSON.stringify(event.key)} changed:`, event.changes);
|
|
261
|
+
}
|
|
262
|
+
}
|
|
181
263
|
```
|