//Imports import fs from "fs" import path from "path" /** Setup */ export default async function ({log = true} = {}) { //Init const logger = log ? console.debug : () => null logger(`metrics/setup > setup`) const templates = "src/templates" const conf = { templates:{}, settings:{}, statics:path.resolve("src/html"), node_modules:path.resolve("node_modules"), } //Load settings logger(`metrics/setup > load settings.json`) if (fs.existsSync(path.resolve("settings.json"))) { conf.settings = JSON.parse(`${await fs.promises.readFile(path.resolve("settings.json"))}`) logger(`metrics/setup > load settings.json > success`) } else logger(`metrics/setup > load settings.json > (missing)`) if (!conf.settings.templates) conf.settings.templates = {default:"classic", enabled:[]} if (!conf.settings.plugins) conf.settings.plugins = {} conf.settings.plugins.base = {parts:["header", "activity", "community", "repositories", "metadata"]} if (conf.settings.debug) logger(conf.settings) //Load package settings logger(`metrics/setup > load package.json`) if (fs.existsSync(path.resolve("package.json"))) { conf.package = JSON.parse(`${await fs.promises.readFile(path.resolve("package.json"))}`) logger(`metrics/setup > load package.json > success`) } else { logger(`metrics/setup > load package.json > (missing)`) conf.package = {version:"<#version>", author:"lowlighter"} } //Load templates if (fs.existsSync(path.resolve(templates))) { for (const name of await fs.promises.readdir(templates)) { //Cache templates if (/.*[.]mjs$/.test(name)) continue logger(`metrics/setup > load template [${name}]`) const files = [ `${templates}/${name}/query.graphql`, `${templates}/${name}/image.svg`, `${templates}/${name}/style.css`, `${templates}/${name}/fonts.css`, ] const [query, image, style, fonts] = await Promise.all(files.map(async file => `${await fs.promises.readFile(path.resolve(file))}`)) conf.templates[name] = {query, image, style, fonts} logger(`metrics/setup > load template [${name}] > success`) //Debug if (conf.settings.debug) { Object.defineProperty(conf.templates, name, { get() { logger(`metrics/setup > reload template [${name}]`) const [query, image, style, fonts] = files.map(file => `${fs.readFileSync(path.resolve(file))}`) logger(`metrics/setup > reload template [${name}] > success`) return {query, image, style, fonts} } }) } } } else { logger(`metrics/setup > load templates from build`) conf.templates = JSON.parse(Buffer.from(`<#assets>`, "base64").toString("utf8")) } //Conf logger(`metrics/setup > setup > success`) return conf }