#!/usr/bin/env node
const { program } = require('commander');
const fs = require('fs');
const { spawn } = require('child_process');
program
.version('1.0.0')
.description('Streams DOM element data for CLI exploration.');
program
.command('stream <selector>')
.description('Streams data for elements matching the selector.')
.option('-n, --lines <n>', 'Number of lines to stream', '10')
.action((selector, options) => {
const lines = parseInt(options.lines, 10);
if (isNaN(lines) || lines <= 0) {
console.error('Invalid number of lines. Must be a positive integer.');
process.exit(1);
}
const command = `puppeteer-playwright --headless --timeout 30000 --selector "${selector}" --limit ${lines} --output json`; // Using puppeteer-playwright for robust DOM traversal
console.log(`Executing: ${command}`);
const process = spawn(command, { shell: true });
let data = '';
process.stdout.on('data', (chunk) => {
data += chunk.toString();
});
process.stderr.on('data', (chunk) => {
console.error(`stderr: ${chunk}`);
});
process.on('close', (code) => {
if (code === 0) {
try {
const parsedData = JSON.parse(data);
console.log(JSON.stringify(parsedData, null, 2)); // Pretty print JSON
} catch (error) {
console.error('Error parsing JSON:', error);
console.error('Raw output: ', data);
}
} else {
console.error(`Command exited with code ${code}`);
}
});
});
program.parse(process.argv);
Add your comment