redbadger/website-honestly

View on GitHub
dev/static/index.js

Summary

Maintainability
A
0 mins
Test Coverage
import * as fs from 'fs';
import mkdirp from 'mkdirp';
import { dirname } from 'path';
import { compileSite } from '../../site/compiler';
import getSiteState from '../../state';

function makeWritePath(path) {
  return `./dist/static-site/${path}`;
}

function makeDirectory(obj) {
  const dir = dirname(makeWritePath(obj.path));
  return new Promise((resolve, reject) =>
    mkdirp(dir, err => {
      if (err) {
        reject(err);
      } else {
        resolve(obj);
      }
    }),
  );
}

function writePage({ path, body }) {
  const writePath = makeWritePath(path);
  console.log(`Writing ${writePath}`); // eslint-disable-line no-console
  return new Promise((resolve, reject) =>
    fs.writeFile(writePath, body, err => {
      if (err) {
        reject(err);
      } else {
        resolve(true);
      }
    }),
  );
}

function writePages(state) {
  return Promise.all(state.data.map(page => makeDirectory(page).then(writePage))).then(data => ({
    ...state,
    data,
  }));
}

getSiteState()
  .then(compileSite)
  .then(writePages)
  .then(() => {
    console.log('Site compiled to dist/static-site/'); // eslint-disable-line no-console
  })
  .catch(error => {
    console.error(error); // eslint-disable-line no-console
    process.exit(1);
  });