ssi-patterns / ssi-pattern-connections-visualization / examples / build.js
build.js
Raw
#!/usr/bin/env node
const fs = require("fs");
const fsExtra = require("fs-extra");
const path = require("path");
const rimraf = require("rimraf");
const kotatsu = require("kotatsu");
const { eachSeries } = require("async");

const outputDir = process.argv[2];

if (!outputDir) {
  console.error("Missing output directory!");
  process.exit(1);
}

rimraf.sync(outputDir);
fsExtra.mkdirSync(outputDir, { recursive: true });

function buildExample(name, callback) {
  console.log();
  console.log(`Building ${name}...`);

  const inputSubFolder = path.resolve(__dirname, name);
  const outputSubFolder = path.resolve(outputDir, name);

  fsExtra.mkdirSync(outputSubFolder);
  fsExtra.mkdirSync(path.resolve(outputSubFolder, "build"));
  fsExtra.copyFileSync(path.resolve(inputSubFolder, "index.html"), path.resolve(outputSubFolder, "index.html"));

  if (fsExtra.existsSync(path.resolve(inputSubFolder, "public"))) {
    fsExtra.copySync(path.resolve(inputSubFolder, "public"), outputSubFolder);
  }

  kotatsu.build(
    "front",
    {
      entry: path.resolve(inputSubFolder, "index.ts"),
      config: require("./webpack.config"),
      output: path.resolve(outputSubFolder, "build/bundle.js"),
      production: true,
    },
    callback,
  );
}

// List all examples:
const notExamples = new Set(["build", "node_modules"]);
const examples = fs
  .readdirSync("./", { withFileTypes: true })
  .filter(
    (dirent) =>
      dirent.isDirectory() &&
      !notExamples.has(dirent.name) &&
      fs.existsSync(path.resolve(__dirname, dirent.name, "index.ts")),
  )
  .map((dirent) => dirent.name);

eachSeries(
  examples,
  (name, next) => {
    buildExample(name, next);
  },
  (err) => {
    if (err) return console.error(err);

    console.log();
    console.log("Finished building examples!");
  },
);