UNPKG

7.2 kBJavaScriptView Raw
1"use strict";
2Object.defineProperty(exports, "__esModule", { value: true });
3const chokidar = require("chokidar");
4const findUp = require("find-up");
5const path = require("path");
6const anymatch_1 = require("anymatch");
7const backfill_logger_1 = require("backfill-logger");
8const backfill_config_1 = require("backfill-config");
9let changedFilesOutsideScope = [];
10let changedFilesInsideScope = [];
11let watcher;
12function getGitRepositoryRoot(packageRoot) {
13 const nearestGitFolder = findUp.sync(".git", {
14 cwd: packageRoot,
15 type: "directory"
16 });
17 if (nearestGitFolder) {
18 // Return the parent folder of some/path/.git
19 return path.join(nearestGitFolder, "..");
20 }
21 return packageRoot;
22}
23function addGlobstars(globPatterns) {
24 const folders = globPatterns.map(p => path.posix.join("**", p, "**", "*"));
25 const files = globPatterns.map(p => path.posix.join("**", p));
26 return [...folders, ...files];
27}
28function initializeWatcher(packageRoot, internalCacheFolder, logFolder, outputFolder, hashGlobs) {
29 // Trying to find the git root and using it as an approximation of code boundary
30 const repositoryRoot = getGitRepositoryRoot(packageRoot);
31 // Empty the arrays
32 changedFilesOutsideScope = [];
33 changedFilesInsideScope = [];
34 backfill_logger_1.logger.info("Running in AUDIT mode");
35 backfill_logger_1.logger.info(`[audit] Watching file changes in: ${repositoryRoot}`);
36 backfill_logger_1.logger.info(`[audit] Backfill will cache folder: ${outputFolder}`);
37 // Define globs
38 const ignoreGlobs = addGlobstars([
39 ".git",
40 ".cache",
41 logFolder,
42 internalCacheFolder
43 ]);
44 const cacheFolderGlob = backfill_config_1.outputFolderAsArray(outputFolder).map(folder => path.posix.join("**", folder, "**"));
45 watcher = chokidar
46 .watch(hashGlobs, {
47 ignored: ignoreGlobs,
48 cwd: repositoryRoot,
49 persistent: true,
50 ignoreInitial: true,
51 followSymlinks: false,
52 usePolling: true
53 })
54 .on("all", (event, filePath) => {
55 const logLine = `${filePath} (${event})`;
56 backfill_logger_1.logger.silly(`[audit] File change: ${logLine}`);
57 if (!anymatch_1.default(cacheFolderGlob, filePath)) {
58 changedFilesOutsideScope.push(logLine);
59 }
60 else {
61 changedFilesInsideScope.push(logLine);
62 }
63 });
64}
65exports.initializeWatcher = initializeWatcher;
66exports.sideEffectWarningString = "[audit] The following files got changed outside of the scope of the folder to be cached:";
67exports.sideEffectCallToActionString = "[audit] You should make sure that these changes are non-essential, as they would not be brought back on a cache-hit.";
68exports.noSideEffectString = "[audit] All observed file changes were within the scope of the folder to be cached.";
69async function delay(time) {
70 return new Promise(resolve => {
71 setTimeout(resolve, time);
72 });
73}
74async function closeWatcher() {
75 // Wait for one second before closing, giving time for file changes to propagate
76 await delay(1000);
77 if (changedFilesOutsideScope.length > 0) {
78 backfill_logger_1.logger.warn(exports.sideEffectWarningString);
79 changedFilesOutsideScope.forEach(file => backfill_logger_1.logger.warn(`- ${file}`));
80 backfill_logger_1.logger.warn(exports.sideEffectCallToActionString);
81 }
82 else {
83 backfill_logger_1.logger.info(exports.noSideEffectString);
84 }
85 watcher.close();
86}
87exports.closeWatcher = closeWatcher;
88//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBcUM7QUFDckMsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3Qix1Q0FBZ0M7QUFDaEMscURBQXlDO0FBQ3pDLHFEQUFzRDtBQUV0RCxJQUFJLHdCQUF3QixHQUFhLEVBQUUsQ0FBQztBQUM1QyxJQUFJLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztBQUUzQyxJQUFJLE9BQTJCLENBQUM7QUFFaEMsU0FBUyxvQkFBb0IsQ0FBQyxXQUFtQjtJQUMvQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQzNDLEdBQUcsRUFBRSxXQUFXO1FBQ2hCLElBQUksRUFBRSxXQUFXO0tBQ2xCLENBQUMsQ0FBQztJQUVILElBQUksZ0JBQWdCLEVBQUU7UUFDcEIsNkNBQTZDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxZQUFzQjtJQUMxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELFNBQWdCLGlC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
\No newline at end of file