UNPKG

@worldapi/cli

Version:

A productivity focused CLI and terminal for WorldAPI.

43 lines (42 loc) 1.52 kB
import { checkFolderExistance } from "../../functions/checkFolderExistance.js"; import refs from "../../refs.js"; import * as fs from "fs/promises"; import * as chokidar from "chokidar"; import getConfig from "../../functions/getConfig.js"; import delete_cmd from "./delete.js"; async function watch(path) { await checkFolderExistance(`${refs.rootDir}/snippets`); const snippets = await fs.readdir(`${refs.rootDir}/snippets`); const config = await getConfig(); let snippetTriggers = []; if (config.snippets) snippetTriggers = Object.values(config.snippets); if (snippetTriggers.length == 0) return console.log("[WorldAPI]: No snippets found"); console.info(`[WorldAPI]: Watching ${path} for changes...`); const watcher = chokidar.watch(path); watcher.on("change", async (path2) => { let fileContent = await fs.readFile(path2, "utf-8"); const triggers = Object.entries(config.snippets); const triggered = triggers.filter( ([name, trigger]) => fileContent.includes(trigger) ); if (!triggered.length) return; triggered.forEach(async ([name, trigger]) => { if (!snippets.includes(name)) return await delete_cmd(name); const snippetContent = await fs.readFile( `${refs.rootDir}/snippets/${name}`, "utf-8" ); while (fileContent.includes(trigger)) { fileContent = fileContent.replace(trigger, snippetContent); await fs.writeFile(path2, fileContent); } }); }); } export { watch as default };