OtherDevOpsGene/zap-sonar-plugin

View on GitHub
scripts/build.js

Summary

Maintainability
A
1 hr
Test Coverage
/*
 * Copy from https://github.com/SonarSource/sonar-custom-plugin-example/blob/7.x/scripts/build.js
 *
 * Copyright (C) 2017-2017 SonarSource SA
 * All rights reserved
 * mailto:info AT sonarsource DOT com
 */
/* eslint-disable no-console */
process.env.NODE_ENV = "production";

const chalk = require("chalk");
const webpack = require("webpack");
const config = require("../conf/webpack/webpack.config.prod.js");

function formatSize(bytes) {
  if (bytes === 0) {
    return "0";
  }
  const k = 1000; // or 1024 for binary
  const sizes = ["Bytes", "KB", "MB", "GB", "TB", "PB", "EB", "ZB", "YB"];
  const i = Math.floor(Math.log(bytes) / Math.log(k));
  return parseFloat((bytes / Math.pow(k, i)).toFixed(1)) + " " + sizes[parseInt(i, 10)];
}

function build() {
  console.log(chalk.cyan.bold("Creating optimized production build..."));
  console.log();

  webpack(config, (err, stats) => {
    if (err) {
      console.log(chalk.red.bold("Failed to create a production build!"));
      console.log(chalk.red(err.message || err));
      process.exit(1);
    }

    if (stats.compilation.errors && stats.compilation.errors.length) {
      console.log(chalk.red.bold("Failed to create a production build!"));
      stats.compilation.errors.forEach((err) => console.log(chalk.red(err.message || err)));
      process.exit(1);
    }

    const jsonStats = stats.toJson();

    console.log("Assets:");
    const assets = jsonStats.assets.slice();
    assets.sort((a, b) => b.size - a.size);
    assets.forEach((asset) => {
      let sizeLabel = formatSize(asset.size);
      const leftPadding = " ".repeat(Math.max(0, 8 - sizeLabel.length));
      sizeLabel = leftPadding + sizeLabel;
      console.log("", chalk.yellow(sizeLabel), asset.name);
    });
    console.log();

    const seconds = jsonStats.time / 1000;
    console.log("Duration: " + seconds.toFixed(2) + "s");
    console.log();

    console.log(chalk.green.bold("Compiled successfully!"));
  });
}

build();