'use strict'; const fs = require('fs'); const glob = require('glob'); const path = require('path'); const util = require('util'); const execSync = require('child_process').execSync; const camelcase = require('camelcase'); function convertKeysToCamelCase(input) { let result = {}; Object.keys(input).map((key, _) => { const value = input[key]; if (value !== null && value.constructor == Object) { result[camelcase(key)] = convertKeysToCamelCase(value); } else { result[camelcase(key)] = value; } }); return result; } function getVersion() { return execSync('git describe --always --dirty --long --tags').toString(); } function getConfig() { const yaml = require('js-yaml'); const merge = require('merge'); const camelcaseKeys = require('camelcase-keys'); function parseConfigFile(path) { let result = yaml.load(fs.readFileSync(path, 'utf-8')); return convertKeysToCamelCase(result); } let config = parseConfigFile('../config.yaml.dist'); try { const localConfig = parseConfigFile('../config.yaml'); config = merge.recursive(config, localConfig); } catch (e) { console.warn('Local config does not exist, ignoring'); } delete config.secret; delete config.smtp; delete config.database; config.meta = { version: getVersion(), buildDate: new Date().toUTCString(), }; return config; } function bundleHtml(config) { const minify = require('html-minifier').minify; const baseHtml = fs.readFileSync('./html/index.htm', 'utf-8'); glob('./html/**/*.hbs', {}, (er, files) => { let templatesHtml = ''; for (const file of files) { templatesHtml += util.format( '%s', path.basename(file, '.hbs').replace('_', '-'), fs.readFileSync(file)); } const finalHtml = baseHtml .replace(/(<\/head>)/, templatesHtml + '$1') .replace( /(