1 | ;
|
2 | Object.defineProperty(exports, "__esModule", { value: true });
|
3 | const chokidar = require("chokidar");
|
4 | const findUp = require("find-up");
|
5 | const path = require("path");
|
6 | const anymatch_1 = require("anymatch");
|
7 | const backfill_logger_1 = require("backfill-logger");
|
8 | const backfill_config_1 = require("backfill-config");
|
9 | let changedFilesOutsideScope = [];
|
10 | let changedFilesInsideScope = [];
|
11 | let watcher;
|
12 | function 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 | }
|
23 | function 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 | }
|
28 | function 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 | }
|
65 | exports.initializeWatcher = initializeWatcher;
|
66 | exports.sideEffectWarningString = "[audit] The following files got changed outside of the scope of the folder to be cached:";
|
67 | exports.sideEffectCallToActionString = "[audit] You should make sure that these changes are non-essential, as they would not be brought back on a cache-hit.";
|
68 | exports.noSideEffectString = "[audit] All observed file changes were within the scope of the folder to be cached.";
|
69 | async function delay(time) {
|
70 | return new Promise(resolve => {
|
71 | setTimeout(resolve, time);
|
72 | });
|
73 | }
|
74 | async 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 | }
|
87 | exports.closeWatcher = closeWatcher;
|
88 | //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXVkaXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvYXVkaXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxxQ0FBcUM7QUFDckMsa0NBQWtDO0FBQ2xDLDZCQUE2QjtBQUM3Qix1Q0FBZ0M7QUFDaEMscURBQXlDO0FBQ3pDLHFEQUFzRDtBQUV0RCxJQUFJLHdCQUF3QixHQUFhLEVBQUUsQ0FBQztBQUM1QyxJQUFJLHVCQUF1QixHQUFhLEVBQUUsQ0FBQztBQUUzQyxJQUFJLE9BQTJCLENBQUM7QUFFaEMsU0FBUyxvQkFBb0IsQ0FBQyxXQUFtQjtJQUMvQyxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO1FBQzNDLEdBQUcsRUFBRSxXQUFXO1FBQ2hCLElBQUksRUFBRSxXQUFXO0tBQ2xCLENBQUMsQ0FBQztJQUVILElBQUksZ0JBQWdCLEVBQUU7UUFDcEIsNkNBQTZDO1FBQzdDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxnQkFBZ0IsRUFBRSxJQUFJLENBQUMsQ0FBQztLQUMxQztJQUVELE9BQU8sV0FBVyxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLFlBQVksQ0FBQyxZQUFzQjtJQUMxQyxNQUFNLE9BQU8sR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsRUFBRSxJQUFJLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUMzRSxNQUFNLEtBQUssR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFFOUQsT0FBTyxDQUFDLEdBQUcsT0FBTyxFQUFFLEdBQUcsS0FBSyxDQUFDLENBQUM7QUFDaEMsQ0FBQztBQUVELFNBQWdCLGlC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 |
\ | No newline at end of file |