const invariant = require("invariant");

const createAssets = require("./utils/createAssets");

/**
 * An express middleware that sets req.assets from the
 * latest result from a running webpack compiler (i.e. using
 * webpack-dev-middleware). Should only be used in dev.
 */
function devAssets(webpackCompiler) {
  let assets;
  webpackCompiler.plugin("done", stats => {
    assets = createAssets(stats.toJson());
  });

  return (req, res, next) => {
    invariant(
      assets != null,
      "devAssets middleware needs a running compiler; " +
        "use webpack-dev-middleware in front of devAssets"
    );

    req.assets = assets;

    next();
  };
}

module.exports = devAssets;