You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
/** @typedef {import("webpack/lib/Compilation.js")} WebpackCompilation */ /** @typedef {{timestamp: number, fileDependencies: string[]}} Snapshot */ 'use strict';
/** * * @param {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} fileDependencies * @param {WebpackCompilation} compilation * @param {number} startTime */ function createSnapshot (fileDependencies, compilation, startTime) { const flatDependencies = []; Object.keys(fileDependencies).forEach((depencyTypes) => { fileDependencies[depencyTypes].forEach(fileDependency => { flatDependencies.push(fileDependency); }); }); return { fileDependencies: flatDependencies, timestamp: startTime }; }
/** * Returns true if the files inside this snapshot * have not been changed * * @param {Snapshot} snapshot * @param {WebpackCompilation} compilation * @returns {Promise<boolean>} */ function isSnapShotValid (snapshot, compilation) { // Check if any dependent file was changed after the last compilation
const fileTimestamps = compilation.fileTimestamps; const isCacheOutOfDate = snapshot.fileDependencies.some((fileDependency) => { const timestamp = fileTimestamps.get(fileDependency); // If the timestamp is not known the file is new
// If the timestamp is larger then the file has changed
// Otherwise the file is still the same
return !timestamp || timestamp > snapshot.timestamp; }); return Promise.resolve(!isCacheOutOfDate); }
/** * Ensure that the files keep watched for changes * and will trigger a recompile * * @param {WebpackCompilation} mainCompilation * @param {{fileDependencies: string[], contextDependencies: string[], missingDependencies: string[]}} fileDependencies */ function watchFiles (mainCompilation, fileDependencies) { Object.keys(fileDependencies).forEach((depencyTypes) => { fileDependencies[depencyTypes].forEach(fileDependency => { mainCompilation.compilationDependencies.add(fileDependency); }); }); }
module.exports = { createSnapshot, isSnapShotValid, watchFiles };
|