4bnode
Version:
4bnode is a CLI-powered backend development platform with a built-in visual dashboard to generate, manage, and test Node.js/Express APIs faster.
77 lines (61 loc) • 2.16 kB
JavaScript
import path from "path";
import { input } from "@inquirer/prompts";
import { getProjectRoot } from "./lib/project.js";
import { updateEnvFile } from "./lib/env.js";
import { addImport, insertBeforeListen } from "./lib/indexFile.js";
import {
showHeader,
showTaskDone,
showError,
showFileAction,
installDeps,
} from "./lib/ui.js";
async function main() {
showHeader("add-serialport", "Add serial port communication");
const serialPortPath = await input({
message: "Serial port path:",
default: process.platform === "win32" ? "COM3" : "/dev/tty-usbserial1",
});
const baudRate = await input({
message: "Baud rate:",
default: "9600",
validate: (v) => (!isNaN(parseInt(v, 10)) ? true : "Enter a valid number."),
});
console.log();
addImport("import { SerialPort } from 'serialport';");
addImport("import { ReadlineParser } from '@serialport/parser-readline';");
showFileAction("updated", "index.js");
const serialportSetup = `
try {
const serialPort = new SerialPort({
baudRate: parseInt(process.env.BAUDRATE, 10) || ${baudRate},
path: process.env.SERIALPORT_PATH || '${serialPortPath}',
});
const parser = serialPort.pipe(new ReadlineParser({ delimiter: "\\r\\n" }));
parser.on("data", async (data) => {
console.log('Received data:', data);
});
serialPort.on("error", function (err) {
console.error("SerialPort Error: ", err.message);
});
} catch (error) {
console.error("Error initializing SerialPort:", error);
}`;
insertBeforeListen(serialportSetup);
const projectRoot = getProjectRoot();
updateEnvFile(path.join(projectRoot, ".env"), "SERIALPORT_PATH", serialPortPath);
updateEnvFile(path.join(projectRoot, ".env"), "BAUDRATE", baudRate);
showFileAction("updated", ".env");
await installDeps(["serialport", "@serialport/parser-readline"]);
showTaskDone("SerialPort integration complete", [
`Path: ${serialPortPath}`,
`Baud rate: ${baudRate}`,
"Data logged to console on receive",
]);
}
main().catch((err) => {
if (err.name === "ExitPromptError") process.exit(0);
showError(err.message);
process.exit(1);
});