@worldapi/cli
Version:
A productivity focused CLI and terminal for WorldAPI.
43 lines (42 loc) • 1.52 kB
JavaScript
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
};