text: const weebpack = require('webpack');
  const path = require('path');
  const fs = require('fs');
  
  function getStat(path) {
  	try {
  		const stat = fs.statSync(path);
  
  		return stat ? {
  			mtime: stat.mtimeMs,
  			size: stat.size,
  			inode: stat.ino,
  		} : null;
  	} catch {
  		return null;
  	}
  }
  
  class SaveStatePlugin {
  	constructor(inp) {
  		this.cache = [];
  		this.cachePath = inp.cachePath;
  	}
  
  	apply(compiler) {
  		compiler.hooks.afterCompile.tap('SaveStatePlugin', (compilation) => {
  			for (const file of compilation.fileDependencies) {
  				this.cache.push({
  					name: file,
  					stats: getStat(file)
  				});
  			}
  		});
  
  		compiler.hooks.done.tap('SaveStatePlugin', (stats) => {
  			if (stats.hasErrors()) {
  				return;
  			}
  
  			fs.writeFile(this.cachePath, JSON.stringify(this.cache), () => {
  
  			});
  		});
  	}
  }
  
  module.exports = (inp, callback) => {
  	const config = require(inp.configPath);
  	
  	config.context = inp.resourcePath;
  	
  	if (config.output && config.output.path) {
  		config.output.path = path.resolve(inp.resourcePath, config.output.path);
  	}
  
  	if (!config.plugins) {
  		config.plugins = [];
  	}
  
  	config.plugins.push(new SaveStatePlugin(inp));
  	
  	weebpack(config, (err, stats) => {
  		if (err) {
  			callback(err);
  			return;
  		}
  		
  		if (stats.hasErrors()) {
  			callback(null, stats.toJson());
  			return;
  		}
  		
  		callback(null, {});
  	});
  };