UNPKG

@el3um4s/ipc-for-electron-chokidar

Version:

Allow the renderer to use chokidar (Minimal and efficient cross-platform file watching library)

92 lines (91 loc) 3.51 kB
"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable @typescript-eslint/no-unused-vars */ const ipc_for_electron_1 = require("@el3um4s/ipc-for-electron"); const Chokidar = require("chokidar"); const to_try_1 = require("@el3um4s/to-try"); const nameAPI = "chokidar"; // to Main const validSendChannel = { watchFolder: watchFolder, watchFile: watchFile, }; // from Main const validReceiveChannel = ["folderChanged", "fileChanged"]; const chokidar = new ipc_for_electron_1.IPC({ nameAPI, validSendChannel, validReceiveChannel, }); exports.default = chokidar; const sendMessage = (watcher, mainWindow, nameMessage, message) => { const [ok, ko] = (0, to_try_1.toTry)(() => mainWindow.webContents.send(nameMessage, message)); if (ko) { watcher.close(); } }; function watchFolder(mainWindow, event, message) { return __awaiter(this, void 0, void 0, function* () { const { folderPath, nameWatcher } = message; const watcher = Chokidar.watch(folderPath, { // eslint-disable-next-line no-useless-escape ignored: /(^|[\/\\])\../, ignoreInitial: true, }); watcher .on("add", (path) => sendMessage(watcher, mainWindow, "folderChanged", { path, eventName: "add", nameWatcher, })) .on("change", (path) => sendMessage(watcher, mainWindow, "folderChanged", { path, eventName: "change", nameWatcher, })) .on("unlink", (path) => sendMessage(watcher, mainWindow, "folderChanged", { path, eventName: "unlink", nameWatcher, })) .on("addDir", (path) => sendMessage(watcher, mainWindow, "folderChanged", { path, eventName: "addDir", nameWatcher, })) .on("unlinkDir", (path) => sendMessage(watcher, mainWindow, "folderChanged", { path, eventName: "unlinkDir", nameWatcher, })); }); } function watchFile(mainWindow, event, message) { const { filePath, nameWatcher } = message; const watcher = Chokidar.watch(filePath, { ignoreInitial: true }); watcher .on("add", (path) => sendMessage(watcher, mainWindow, "fileChanged", { path, eventName: "add", nameWatcher, })) .on("change", (path) => sendMessage(watcher, mainWindow, "fileChanged", { path, eventName: "change", nameWatcher, })) .on("unlink", (path) => sendMessage(watcher, mainWindow, "fileChanged", { path, eventName: "unlink", nameWatcher, })); }