UNPKG

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.

88 lines (72 loc) 1.91 kB
#!/usr/bin/env node import { input } from "@inquirer/prompts"; import { addImport, insertBeforeRoutes, replaceAppListen, } from "./lib/indexFile.js"; import { showHeader, showTaskDone, showError, showFileAction, installDeps, } from "./lib/ui.js"; async function main() { showHeader("add-socket", "Add Socket.IO real-time support"); const ipAddresses = await input({ message: "CORS origins (comma-separated, or * for all):", default: "*", }); console.log(); let corsOrigins; if (ipAddresses.trim() === "*") { corsOrigins = '["*"]'; } else { const ipArray = ipAddresses.split(",").map((ip) => ip.trim()); corsOrigins = `[${ipArray.map((ip) => `"http://${ip}"`).join(", ")}]`; } addImport('import { Server } from "socket.io";'); addImport('import http from "http";'); showFileAction("updated", "index.js"); const socketSetup = ` const server = http.createServer(app); const io = new Server(server, { cors: { origin: ${corsOrigins}, methods: ["GET", "POST"] } }); io.on("connection", (socket) => { console.log("A user connected"); socket.on("disconnect", () => { console.log("User disconnected"); }); }); app.use((req, res, next) => { req.io = io; next(); });`; insertBeforeRoutes(socketSetup); replaceAppListen(` server.listen(port, () => { const localIp = getLocalNetworkIp(); console.log(\`App is running on http://localhost:\${port}\`); if (localIp) { console.log( \`App is also accessible on your local network at http://\${localIp}:\${port}\` ); } });`); await installDeps("socket.io"); showTaskDone("Socket.IO integration complete", [ `CORS: ${ipAddresses.trim()}`, "Access via req.io in routes", "Events: connection, disconnect", ]); } main().catch((err) => { if (err.name === "ExitPromptError") process.exit(0); showError(err.message); process.exit(1); });