var argv = require("minimist")(process.argv.slice(2)); const fs = require("fs"); const folder = "./src/components/"; if (!argv["target"]) { console.error( "please provide Vuepress folder address as an argument. i.e '--target ../documentation/docs'" ); process.exit(); } const target = argv["target"]; function readFolder(folder, subName) { const files = fs.readdirSync(folder); var list = []; files.forEach(file => { const stat = fs.statSync(folder + "/" + file); if (stat.isDirectory()) { const dir = `${folder}/${file}/`; list = list.concat(readFolder(dir, file)); } else { if (file.includes(".md") && !!subName) { list.push({ file: fs.readFileSync(`${folder}/${file}`), name: subName }); } } }); return list; } function watchFolder(folder, cb) { const files = fs.readdirSync(folder); files.forEach(file => { const stat = fs.statSync(folder + "/" + file); if (stat.isDirectory()) { const dir = `${folder}${file}/`; debouncedWatch(dir, cb); } }); } function debouncedWatch(dir, cb) { let fsWait = false; fs.watch(dir, (_, filename) => { if (filename) { if (fsWait) return; fsWait = setTimeout(() => { fsWait = false; }, 100); console.log(`${filename} file Changed`); cb(); } }); } watchFolder(folder, () => { const files = readFolder(folder); files.forEach(file => { console.log("writing docs for: ", file.name); fs.writeFileSync(`${target}${file.name}.md`, file.file); }); });