const express = require('express'); const path = require('path'); const fs = require('fs'); const puppeteer = require('puppeteer'); const templatesPath = path.resolve(__dirname, './templates'); const componentsPath = path.resolve(__dirname, './core/components'); const config = require('./core/config'); module.exports = async app => { global.appPath = __dirname; process.env.OPENSSL_CONF = '/etc/ssl/'; // Extended locale intl polyfill const IntlPolyfill = require('intl'); Intl.NumberFormat = IntlPolyfill.NumberFormat; Intl.DateTimeFormat = IntlPolyfill.DateTimeFormat; // Init database instance require('./core/database').init(); // Init SMTP Instance require('./core/smtp').init(); require('./core/mixins'); require('./core/filters'); require('./core/directives'); // Init router require('./core/router')(app); /** * Serve component static files */ const componentsDir = fs.readdirSync(componentsPath); componentsDir.forEach(componentName => { const componentDir = path.join(componentsPath, '/', componentName); const assetsDir = `${componentDir}/assets`; app.use(`/api/${componentName}/assets`, express.static(assetsDir)); }); /** * Serve static files */ const templatesDir = fs.readdirSync(templatesPath); templatesDir.forEach(directory => { const templateTypeDir = path.join(templatesPath, '/', directory); const templates = fs.readdirSync(templateTypeDir); templates.forEach(templateName => { const templateDir = path.join(templatesPath, '/', directory, '/', templateName); const assetsDir = `${templateDir}/assets`; app.use(`/api/${templateName}/assets`, express.static(assetsDir)); }); }); // Instantiate Puppeteer browser async function launchBrowser() { config.browser = await puppeteer.launch({ headless: true, args: [ '--no-sandbox', '--disable-setuid-sandbox', '--single-process', '--no-zygote' ] }); config.browser.on('disconnected', launchBrowser); } launchBrowser(); };