#!/usr/bin/env node // converts relative file paths at the beginning of each input line to absolute file paths const path = require('path'); const fs = require('fs'); const rl = require('readline'); const REMOVE_COLORS = /[\u001b\u009b][[()#;?]*(?:[0-9]{1,4}(?:;[0-9]{0,4})*)?[0-9A-ORZcf-nqry=><]/g; const dir = process.argv[2]; if (!dir) { throw new Error(`usage: path-prefix DIR`); } const reldir = path.relative(process.cwd(), dir); const ifc = rl.createInterface(process.stdin); ifc.on('line', line => { line = line.toString(); const [ relative, ...rest ] = line.split(':'); const rel = relative.replace(REMOVE_COLORS, ''); const absolute = path.join(dir, rel); if (relative && fs.existsSync(absolute)) { process.stdout.write(path.join(reldir, rel) + ':' + rest.join(':') + '\n'); } else { process.stdout.write(line + '\n'); } }); process.stdin.resume(); function exists(p) { try { fs.readFileSync(p); return true; } catch (e) { return false; } }