const invariant = require("invariant");

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

/**
 * An express middleware that sets req.bundle 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 bundle;
  webpackCompiler.plugin("done", stats => {
    bundle = createBundle(stats.toJson());
  });

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

    req.bundle = bundle;

    next();
  };
}

module.exports = devAssets;