pr-train
v1.0.0
Published
A Steam Locomotive rolls through your terminal carrying your Pull Requests — like sl(1) but for PRs
Maintainers
Readme
pr-train
A Steam Locomotive rolls through your terminal carrying your Pull Requests.
Inspired by sl(1). Run it while you wait for CI. Zero dependencies.
+--+
____| |_____________
| D | | o _ o | ___________ ___________
| | | [_| |_] | | | | |
| |==|=============| | PR #42 | | PR #137 |
| __ | | __ __| |___________| |___________|
|oOo_|__|_|oOo|_____| oOo oO oOo oOInstall
npm install -g pr-trainUsage
pr-train # empty train (classic sl experience)
pr-train 42 137 9001 # train carrying PR #42, #137, #9001
pr-train #42 #137 # # prefix also works
pr-train 42 --fps=25 # custom speed (default: 15 fps)
pr-train --helpPress Ctrl+C to stop early.
Why?
sl punishes you for mistyping ls by making you watch a train.pr-train rewards you for shipping PRs by letting you watch your work roll by.
API
The package also exports the animation engine for programmatic use.
import { startAnimation, buildTrainArt, parseArgs } from 'pr-train';
// Run the animation
const handle = startAnimation([42, 137], {
fps: 20,
stdout: process.stdout,
onEnd: () => console.log('All aboard!'),
});
// Stop early
setTimeout(() => handle.stop(), 3000);Pure functions (no I/O)
import {
buildTrainArt, // (prNumbers) → string[] — TRAIN_HEIGHT rows
buildCarArt, // (pr) → string[] — single car art
buildSmokeFrame, // (tick) → string[] — SMOKE_LINES rows
buildDisplayLines,// (art, x, termWidth, tick) → string[]
clipRow, // (row, x, termWidth) → string
parseArgs, // (argv) → { prs, fps, help }
} from 'pr-train';CommonJS
const { startAnimation, buildTrainArt } = require('pr-train');License
MIT
