diff --git a/index.js b/index.js index 3249490..a6fd4a5 100644 --- a/index.js +++ b/index.js @@ -55,10 +55,14 @@ if ( } try { - const configJSON = fs.existsSync(defaultConfigFilePath) - ? fs.readFileSync(defaultConfigFilePath, "utf8") - : confFileComputedPath - ? fs.readFileSync(confFileComputedPath, "utf8") + const configFinalPath = fs.existsSync(defaultConfigFilePath) + ? defaultConfigFilePath + : confFileComputedPath && fs.existsSync(confFileComputedPath) + ? confFileComputedPath + : null; + + const configJSON = configFinalPath + ? fs.readFileSync(configFinalPath, "utf8") : null; if (!configJSON) @@ -87,6 +91,14 @@ try { } ); } + + // setTimeout(() => { + // if (configFinalPath) { + // fs.watchFile(configFinalPath, { interval: 2000 }, (curr, prev) => { + // process.exit(7); + // }); + // } + // }, 1000); } catch (error) { console.log(`Process Error =>`, error.message); process.exit(); @@ -97,3 +109,17 @@ setInterval(() => { `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", +// }); +// } +// } +// }); diff --git a/lib/watch/files.js b/lib/watch/files.js index 815bc17..c5420ab 100644 --- a/lib/watch/files.js +++ b/lib/watch/files.js @@ -5,6 +5,10 @@ const fs = require("fs"); const path = require("path"); const delay = require("../../utils/delay"); +/** @type {any} */ +let timeout; +const UPDATE_TIMEOUT = 2000; + /** * * @param {SyncFilesFnParams} param0 @@ -72,8 +76,16 @@ async function watchFiles({ files, options }) { interval: interval || 500, }, (curr, prev) => { - sync({ options, filePath, files }); - process.exit(1); + const INTERVAL = options?.interval + ? options.interval + : UPDATE_TIMEOUT; + + clearTimeout(timeout); + + timeout = setTimeout(() => { + sync({ options, filePath, files }); + process.exit(1); + }, INTERVAL); } ); } @@ -89,18 +101,6 @@ async function watchFiles({ files, options }) { * @param {SyncFilesSyncFnParams} param0 */ function sync({ options, filePath, files }) { - let cmdArray = ["rsync", "-avh"]; - - if (options?.delete) { - cmdArray.push("--delete"); - } - - if (options?.exclude?.[0]) { - options.exclude.forEach((excl) => { - cmdArray.push(`--exclude '${excl}'`); - }); - } - const destFiles = files.filter((fl) => { if (typeof fl == "string") return fl !== filePath; if (fl?.path) return fl.path !== filePath; @@ -108,6 +108,18 @@ function sync({ options, filePath, files }) { }); for (let j = 0; j < destFiles.length; j++) { + let cmdArray = ["rsync", "-avh"]; + + if (options?.delete) { + cmdArray.push("--delete"); + } + + if (options?.exclude?.[0]) { + options.exclude.forEach((excl) => { + cmdArray.push(`--exclude '${excl}'`); + }); + } + const dstFl = destFiles[j]; if (typeof dstFl == "string") { if (!fs.existsSync(dstFl)) continue; @@ -121,6 +133,8 @@ function sync({ options, filePath, files }) { cmdArray.push(filePath, dstFl); const cmd = cmdArray.join(" "); + console.log(`Running cmd 1 => ${cmd}`); + execSync(cmd, { stdio: "inherit", }); @@ -146,7 +160,11 @@ function sync({ options, filePath, files }) { }); } else { cmdArray.push(filePath, dstFl.path); + const cmd = cmdArray.join(" "); + + console.log(`Running cmd 2 => ${cmd}`); + execSync(cmd, { stdio: "inherit", }); diff --git a/lib/watch/folders.js b/lib/watch/folders.js index 2bd4203..5c4af62 100644 --- a/lib/watch/folders.js +++ b/lib/watch/folders.js @@ -7,7 +7,7 @@ const delay = require("../../utils/delay"); /** @type {any} */ let timeout; -const UPDATE_TIMEOUT = 1000; +const UPDATE_TIMEOUT = 2000; /** * @@ -19,6 +19,8 @@ async function watchFolders({ folders, options }) { console.log(`Now handling ${dirs.length} Directories`); + const INTERVAL = options?.interval ? options.interval : UPDATE_TIMEOUT; + for (let i = 0; i < dirs.length; i++) { const dir = dirs[i]; @@ -91,7 +93,7 @@ async function watchFolders({ folders, options }) { timeout = setTimeout(() => { sync({ dirPath, dirs, options }); process.exit(1); - }, UPDATE_TIMEOUT); + }, INTERVAL); }); } } @@ -106,18 +108,6 @@ async function watchFolders({ folders, options }) { * @param {SyncFoldersSyncFnParams} param0 */ function sync({ options, dirs, dirPath, init }) { - let cmdArray = ["rsync", "-avh"]; - - if (options?.delete) { - cmdArray.push("--delete"); - } - - if (options?.exclude?.[0]) { - options.exclude.forEach((excl) => { - cmdArray.push(`--exclude '${excl}'`); - }); - } - const dstDirs = dirs.filter((dr) => { if (typeof dr == "string") return dr !== dirPath; if (dr?.path) return dr.path !== dirPath; @@ -125,6 +115,18 @@ function sync({ options, dirs, dirPath, init }) { }); for (let j = 0; j < dstDirs.length; j++) { + let cmdArray = ["rsync", "-avh"]; + + if (options?.delete) { + cmdArray.push("--delete"); + } + + if (options?.exclude?.[0]) { + options.exclude.forEach((excl) => { + cmdArray.push(`--exclude '${excl}'`); + }); + } + const dstDr = dstDirs[j]; if (typeof dstDr == "string") { if (!fs.existsSync(dstDr)) continue; diff --git a/package.json b/package.json index 3270de7..2ab8290 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "turbosync", - "version": "1.3.2", + "version": "1.3.4", "module": "index.js", "scripts": { "start": "node index.ts", diff --git a/types.js b/types.js index f5ff099..c0f2046 100644 --- a/types.js +++ b/types.js @@ -25,6 +25,7 @@ * @typedef {object} TurboSyncOptions * @property {boolean} [delete] - Should files removed be deleted in all destinations? * @property {string[]} [exclude] - Patterns that should be ignored. Eg "*.log" + * @property {number} [interval] - Seconds to delay before update */ /**