#! /usr/bin/env node // @ts-check const fs = require("fs"); const path = require("path"); const { spawn } = require("child_process"); const handleEnvVars = require("./utils/env"); const confFileProvidedPath = process.argv[process.argv.length - 1]; if (confFileProvidedPath === "--version" || confFileProvidedPath === "-v") { try { const packageJson = fs.readFileSync( path.resolve(__dirname, "package.json"), "utf8" ); console.log(`Turbo Sync Version: ${JSON.parse(packageJson).version}`); } catch (error) { console.log( "Turbo Sync Version fetch failed! \nNo Worries, Turbo Sync is still installed properly" ); } process.exit(6); } console.log("Running Folder Sync ..."); const defaultConfigFilePath = path.resolve( process.cwd(), "turbosync.config.json" ); const confFileComputedPath = typeof confFileProvidedPath == "string" && confFileProvidedPath.endsWith(".json") ? path.resolve(process.cwd(), confFileProvidedPath) : null; if (!fs.existsSync(defaultConfigFilePath) && !confFileComputedPath) { console.log( "Please Provide the path to a config file or add a config file named `turbosync.config.json` to the path you're running this program" ); process.exit(); } if ( !defaultConfigFilePath && confFileComputedPath && !fs.existsSync(confFileComputedPath) ) { console.log("Config File does not exist"); process.exit(); } try { const configFinalPath = fs.existsSync(defaultConfigFilePath) ? defaultConfigFilePath : confFileComputedPath && fs.existsSync(confFileComputedPath) ? confFileComputedPath : null; const configJSON = configFinalPath ? fs.readFileSync(configFinalPath, "utf8") : null; if (!configJSON) throw new Error( "Config JSON could not be resolved. Please check your files." ); const parsedConfigJSON = handleEnvVars({ json: configJSON }); /** @type {TurboSyncConfigArray} */ const configArray = JSON.parse(parsedConfigJSON); for (let i = 0; i < configArray.length; i++) { const config = configArray[i]; console.log(`Syncing \`${config.title} ...\``); const childProcess = spawn( "node", [ path.resolve(__dirname, "./lib/sync.js"), `${JSON.stringify(config)}`, ], { stdio: "inherit", detached: false, } ); } // setTimeout(() => { // if (configFinalPath) { // fs.watchFile(configFinalPath, { interval: 2000 }, (curr, prev) => { // process.exit(7); // }); // } // }, 1000); } catch (error) { console.log(`Process Error =>`, error.message); process.exit(); } setInterval(() => { console.log( `Turbo Sync Running for ${process.uptime().toLocaleString()}s ...` ); }, 60000); // process.on("exit", (code) => { // if (code === 7) { // console.log("Config file changed. Restarting Turbo Sync service ..."); // const args = process.argv; // const cmd = args.shift(); // if (cmd) { // spawn(cmd, args, { // stdio: "inherit", // }); // } // } // });