text: // Tasks to run webpack.
  const gulp = require("gulp");
  const path = require("path");
  const webpack = require("webpack");
  const WebpackDevServer = require("webpack-dev-server");
  const log = require("fancy-log");
  const paths = require("../paths");
  const { createAppConfig, createDemoConfig } = require("../webpack");
  
  const handler = (done) => (err, stats) => {
    if (err) {
      console.log(err.stack || err);
      if (err.details) {
        console.log(err.details);
      }
      return;
    }
  
    log(`Build done @ ${new Date().toLocaleTimeString()}`);
  
    if (stats.hasErrors() || stats.hasWarnings()) {
      console.log(stats.toString("minimal"));
    }
  
    if (done) {
      done();
    }
  };
  
  gulp.task("webpack-watch-app", () => {
    const compiler = webpack([
      createAppConfig({
        isProdBuild: false,
        latestBuild: true,
        isStatsBuild: false,
      }),
      createAppConfig({
        isProdBuild: false,
        latestBuild: false,
        isStatsBuild: false,
      }),
    ]);
    compiler.watch({}, handler());
    // we are not calling done, so this command will run forever
  });
  
  gulp.task(
    "webpack-prod-app",
    () =>
      new Promise((resolve) =>
        webpack(
          [
            createAppConfig({
              isProdBuild: true,
              latestBuild: true,
              isStatsBuild: false,
            }),
            createAppConfig({
              isProdBuild: true,
              latestBuild: false,
              isStatsBuild: false,
            }),
          ],
          handler(resolve)
        )
      )
  );
  
  gulp.task("webpack-dev-server-demo", () => {
    const compiler = webpack([
      createDemoConfig({
        isProdBuild: false,
        latestBuild: false,
        isStatsBuild: false,
      }),
      createDemoConfig({
        isProdBuild: false,
        latestBuild: true,
        isStatsBuild: false,
      }),
    ]);
  
    new WebpackDevServer(compiler, {
      open: true,
      watchContentBase: true,
      contentBase: path.resolve(paths.demo_dir, "dist"),
    }).listen(8080, "localhost", function(err) {
      if (err) {
        throw err;
      }
      // Server listening
      log("[webpack-dev-server]", "http://localhost:8080");
    });
  });
  
  gulp.task(
    "webpack-prod-demo",
    () =>
      new Promise((resolve) =>
        webpack(
          [
            createDemoConfig({
              isProdBuild: true,
              latestBuild: false,
              isStatsBuild: false,
            }),
            createDemoConfig({
              isProdBuild: true,
              latestBuild: true,
              isStatsBuild: false,
            }),
          ],
          handler(resolve)
        )
      )
  );
  