54 lines
1.6 KiB
JavaScript
Executable File
54 lines
1.6 KiB
JavaScript
Executable File
const chokidar = require('chokidar');
|
|
|
|
const paths = JSON.parse(process.argv[2]);
|
|
const poll = process.argv[3] ? true : false;
|
|
|
|
// Chokidar removed support for glob in version 4...
|
|
const chokidarPackagePath = require.resolve('chokidar').replace('index.js', 'package.json');
|
|
const chokidarVersion4 = require(chokidarPackagePath).version.startsWith('4.');
|
|
|
|
const extractWildcardExtension = (path) => {
|
|
// Match patterns like *.php, **/*.blade.php
|
|
const match = path.match(/\/\*\.((\w|\.)+)$/);
|
|
|
|
return match ? match[1] : null;
|
|
};
|
|
|
|
const getPathBeforeWildcard = (path) => {
|
|
const match = path.match(/^(.*?)(\*|$)/);
|
|
|
|
return match ? match[1] : path;
|
|
};
|
|
|
|
const extractedPaths = paths.map(path => {
|
|
return { path: getPathBeforeWildcard(path), extension: extractWildcardExtension(path) };
|
|
});
|
|
|
|
const watcherPaths = chokidarVersion4 ? extractedPaths.map(ep => ep.path) : paths;
|
|
|
|
const watcherIgnored = chokidarVersion4 ? (path, stats) => {
|
|
if (! stats?.isFile()) {
|
|
return false;
|
|
}
|
|
|
|
const matchedPattern = extractedPaths.find(ep => path.startsWith(ep.path));
|
|
|
|
if (! matchedPattern) {
|
|
return true;
|
|
}
|
|
|
|
return matchedPattern.extension ? ! path.endsWith(`.${matchedPattern.extension}`) : false;
|
|
} : undefined;
|
|
|
|
const watcher = chokidar.watch(watcherPaths, {
|
|
ignoreInitial: true,
|
|
usePolling: poll,
|
|
ignored: watcherIgnored,
|
|
});
|
|
|
|
watcher
|
|
.on('add', () => console.log('File added...'))
|
|
.on('change', () => console.log('File changed...'))
|
|
.on('unlink', () => console.log('File deleted...'))
|
|
.on('unlinkDir', () => console.log('Directory deleted...'));
|