96 lines
No EOL
2.4 KiB
JavaScript
96 lines
No EOL
2.4 KiB
JavaScript
const path = require('path');
|
|
const chokidar = require('chokidar');
|
|
const multimatch = require('multimatch');
|
|
const { dirs, jsFiles, scssFiles, ignoreMask, copyDirs, symlinkFiles } = require('./config');
|
|
const { onSuccess, onError, getSignatures, writeSignatures, cleanUp, formatDirsForMatcher } = require('./utils');
|
|
const getJS = require('./js');
|
|
const getSass = require('./sass');
|
|
const getCopy = require('./copy');
|
|
const getSymlinks = require('./symlinks');
|
|
|
|
|
|
const ROOT = path.resolve(__dirname, '..');
|
|
const source = [
|
|
'chrome',
|
|
'components',
|
|
'defaults',
|
|
'resource',
|
|
'scss',
|
|
'test',
|
|
'styles',
|
|
'translators',
|
|
'scss',
|
|
'chrome/**',
|
|
'components/**',
|
|
'defaults/**',
|
|
'resource/**',
|
|
'scss/**',
|
|
'test/**',
|
|
'styles/**',
|
|
'translators/**',
|
|
'scss/**'
|
|
];
|
|
|
|
const symlinks = symlinkFiles
|
|
.concat(dirs.map(d => `${d}/**`))
|
|
.concat([`!${formatDirsForMatcher(dirs)}/**/*.js`])
|
|
.concat([`!${formatDirsForMatcher(dirs)}/**/*.jsx`])
|
|
.concat([`!${formatDirsForMatcher(dirs)}/**/*.scss`])
|
|
.concat([`!${formatDirsForMatcher(copyDirs)}/**`]);
|
|
|
|
var signatures;
|
|
|
|
process.on('SIGINT', () => {
|
|
writeSignatures(signatures);
|
|
process.exit();
|
|
});
|
|
|
|
function getWatch() {
|
|
let watcher = chokidar.watch(source, { cwd: ROOT })
|
|
.on('change', async (path) => {
|
|
try {
|
|
var matched = false;
|
|
if (multimatch(path, jsFiles).length && !multimatch(path, ignoreMask).length) {
|
|
onSuccess(await getJS(path, { ignore: ignoreMask }, signatures));
|
|
onSuccess(await cleanUp(signatures));
|
|
return;
|
|
}
|
|
for (var i = 0; i < scssFiles.length; i++) {
|
|
if (multimatch(path, scssFiles[i])) {
|
|
onSuccess(await getSass(scssFiles[i], { ignore: ignoreMask }));
|
|
onSuccess(await cleanUp(signatures));
|
|
return;
|
|
}
|
|
}
|
|
if (multimatch(path, copyDirs.map(d => `${d}/**`)).length) {
|
|
onSuccess(await getCopy(path, {}, signatures));
|
|
onSuccess(await cleanUp(signatures));
|
|
return;
|
|
}
|
|
if (multimatch(path, symlinks).length) {
|
|
onSuccess(await getSymlinks(path, { nodir: true }, signatures));
|
|
onSuccess(await cleanUp(signatures));
|
|
return;
|
|
}
|
|
}
|
|
catch (err) {
|
|
onError(err);
|
|
}
|
|
})
|
|
.on('unlink', async () => {
|
|
const signatures = await getSignatures();
|
|
onSuccess(await cleanUp(signatures));
|
|
});
|
|
|
|
watcher.add(source);
|
|
console.log('Watching files for changes...');
|
|
}
|
|
|
|
module.exports = getWatch;
|
|
|
|
if (require.main === module) {
|
|
(async () => {
|
|
signatures = await getSignatures();
|
|
getWatch();
|
|
})();
|
|
} |