const crypto = require('crypto'); const path = require('path'); const nodeObjectHash = require('node-object-hash'); const sort = nodeObjectHash({ sort: false, }).sort; function relateContextToCacheDir(config) { const hardSourcePlugin = config.plugins.find( ({ constructor }) => constructor.name === 'HardSourceWebpackPlugin', ); const cacheDir = hardSourcePlugin.getCachePath(); const context = path.resolve(process.cwd(), config.context); const clone = Object.assign({}, config, { context: path.relative(cacheDir, context), }); const sorted = sort(clone) .replace(new RegExp(`${context}[^,\\]}]*`, 'g'), match => path.relative(cacheDir, match), ) .replace(/\\/g, '/'); return crypto .createHash('sha256') .update(sorted) .digest('hex'); } module.exports = relateContextToCacheDir;