const fs = require('fs') const crypto = require('crypto') /** * Manifest * * creates manifest-file * * @author Björn Hase * @license http://opensource.org/licenses/MIT The MIT License * @link https://git.node001.net/tiny-components/webpack.git * */ class Manifest { /** * * * @param {string} filename * @param {string} context * */ constructor(filename, context) { // filename for manifest-file this._filename = filename // context this._context = context // results for write to file this._results = { } } /** * run through all assets from assetsByChunkName * for each file create a hash * * @param {object} stats * */ run(stats) { let files = Object.assign({}, stats.assetsByChunkName) Object.keys(files).forEach((key) => { files[key].forEach((file) => { this._results[stats.publicPath + file] = stats.publicPath + file + '?version=' + this._hash(file, stats.outputPath) }) }) fs.writeFileSync(this._context + '/' + this._filename, JSON.stringify(this._results, null, 4)) } /** * hash content of file * * @param {string} file * @param {sring} stats * @return {string} * */ _hash(file, outputPath) { const data = fs.readFileSync(outputPath + '/' + file, 'utf8') const hash = crypto .createHash('md5') .update(data) .digest('hex') return hash } } module.exports = Manifest