mirror of
https://github.com/GoogleChromeLabs/squoosh.git
synced 2025-11-12 00:37:19 +00:00
31 lines
1.1 KiB
JavaScript
31 lines
1.1 KiB
JavaScript
const fs = require('fs');
|
|
|
|
/** A Webpack plugin to refresh file mtime values from disk before compiling.
|
|
* This is used in order to account for SCSS-generated .d.ts files written
|
|
* as part of compilation so they trigger only a single recompile per write.
|
|
*
|
|
* All credit for the technique and implementation goes to @reiv. See:
|
|
* https://github.com/Jimdo/typings-for-css-modules-loader/issues/48#issuecomment-347036461
|
|
*/
|
|
module.exports = class WatchTimestampsPlugin {
|
|
constructor(patterns) {
|
|
this.patterns = patterns;
|
|
}
|
|
|
|
apply(compiler) {
|
|
compiler.hooks.watchRun.tapAsync('watch-timestamps-plugin', (watch, callback) => {
|
|
const patterns = this.patterns;
|
|
const timestamps = watch.fileTimestamps;
|
|
|
|
for (const filepath of timestamps) {
|
|
if (patterns.some(pat => pat instanceof RegExp ? pat.test(filepath) : filepath.indexOf(pat) === 0)) {
|
|
let time = fs.statSync(filepath).mtime;
|
|
if (timestamps instanceof Map) timestamps.set(filepath, time);
|
|
else timestamps[filepath] = time;
|
|
}
|
|
}
|
|
callback();
|
|
});
|
|
}
|
|
};
|