All files / src/lib/pluginManager watchGlobalPlugins.ts

78.57% Statements 11/14
100% Branches 0/0
50% Functions 1/2
78.57% Lines 11/14

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 611x 1x       1x               1x   1x         1x                   1x                   1x                   1x           1x     1x  
import chokidar from "chokidar";
import { ensureGlobalPluginsPath } from "./globalPlugins";
 
type WatchCallback = (path: string) => void;
 
const watchGlobalPlugins = async (callbacks: {
  onChangedThemePlugin: WatchCallback;
  onChangedLanguagePlugin: WatchCallback;
  onChangedTemplatePlugin: WatchCallback;
  onRemoveThemePlugin: WatchCallback;
  onRemoveLanguagePlugin: WatchCallback;
  onRemoveTemplatePlugin: WatchCallback;
}) => {
  const globalPluginsPath = await ensureGlobalPluginsPath();
 
  const awaitWriteFinish = {
    stabilityThreshold: 1000,
    pollInterval: 100,
  };
 
  const themePluginWatcher = chokidar
    .watch([`${globalPluginsPath}/**/theme.{json,JSON}`], {
      ignoreInitial: true,
      persistent: true,
      awaitWriteFinish,
    })
    .on("add", callbacks.onChangedThemePlugin)
    .on("change", callbacks.onChangedThemePlugin)
    .on("unlink", callbacks.onRemoveThemePlugin);
 
  const languagePluginWatcher = chokidar
    .watch([`${globalPluginsPath}/**/lang.{json,JSON}`], {
      ignoreInitial: true,
      persistent: true,
      awaitWriteFinish,
    })
    .on("add", callbacks.onChangedLanguagePlugin)
    .on("change", callbacks.onChangedLanguagePlugin)
    .on("unlink", callbacks.onRemoveLanguagePlugin);
 
  const templatePluginWatcher = chokidar
    .watch([`${globalPluginsPath}/**/project.gbsproj`], {
      ignoreInitial: true,
      persistent: true,
      awaitWriteFinish,
    })
    .on("add", callbacks.onChangedTemplatePlugin)
    .on("change", callbacks.onChangedTemplatePlugin)
    .on("unlink", callbacks.onRemoveTemplatePlugin);
 
  const stopWatching = () => {
    themePluginWatcher.close();
    languagePluginWatcher.close();
    templatePluginWatcher.close();
  };
 
  return stopWatching;
};
 
export default watchGlobalPlugins;