84 lines
3.1 KiB
JavaScript
84 lines
3.1 KiB
JavaScript
//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
|
|
|
|
} |