turbo-sync/index.js
Benjamin Toby f2892f1bf4 Updates
2024-10-16 12:39:14 +01:00

126 lines
3.3 KiB
JavaScript

#! /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",
// });
// }
// }
// });