const path = require('path') const fs = require('fs').promises const objectAssignDeep = require(`object-assign-deep`) const yaml = require('js-yaml') const pug = require('pug') const chokidar = require('chokidar') //Set default language const default_lang = 'en' const pugDir = './src' const pugFile = `${pugDir}/index.pug` //Set the translation directory const dataDir = './translation' const outDir = './dist' const paramFile = './config.json' //Compile custom function async function compile() { //Retrieve langues proposed const langs = (await fs.readdir(dataDir)) .filter(f => path.extname(f) === '.yml') .map(f => path.basename(f, '.yml')) const langData = {} //Retrieve traduction await Promise.all( langs.map(lang => fs .readFile(`${dataDir}/${lang}.yml`, 'utf8') .then(text => (langData[lang] = yaml.safeLoad(text))), ), ) for (const lang in langData) { if (lang === default_lang) continue langData[lang] = objectAssignDeep( {}, langData[default_lang], langData[lang], ) } const options = JSON.parse(await fs.readFile(paramFile, 'utf-8')) const pugFct = pug.compileFile(pugFile) await fs.mkdir(outDir, { recursive: true }) //Creation of folders by language with their index.html dans wwww await Promise.all( Object.entries(langData).map(async([lang, data]) => { const opt = Object.assign({}, options, { lang, data }); const dir = `${outDir}/${lang}` await fs.mkdir(dir, { recursive: true }) const html = pugFct(opt) const filename = `${dir}/index.html` console.log(`write ${filename}`) return fs.writeFile(filename, html) }), ) } // Compile with --watch option compile().then(() => { if (!process.argv.includes('-w') && !process.argv.includes('--watch')) return console.log('watching for changes…') chokidar.watch([`${pugDir}/**/*.pug`, `${dataDir}/**/*.yml`, paramFile]).on('change', editedFilePath => { console.log(`\nchanged: ${editedFilePath}`) compile() }) })