generated from azures04/Base-REST-API
Removed user registration and user info endpoints, along with related schemas, services, and tests. Added new routes and service for listing and downloading game files. Updated README to reflect new API purpose. Refactored logger and utils for improved modularity.
93 lines
2.7 KiB
JavaScript
93 lines
2.7 KiB
JavaScript
const fs = require("node:fs")
|
|
const path = require("node:path")
|
|
const utils = require("./utils")
|
|
require("colors")
|
|
require("dotenv").config({
|
|
quiet: true
|
|
})
|
|
|
|
function cleanup($stream) {
|
|
if (!$stream.destroyed) {
|
|
$stream.end()
|
|
}
|
|
}
|
|
|
|
function write($stream, level, color, content, extraLabels = []) {
|
|
const date = new Date().toISOString()
|
|
const message = typeof content === "string" ? content : JSON.stringify(content, null, 2)
|
|
|
|
let consoleLabels = ""
|
|
let fileLabels = ""
|
|
|
|
if (Array.isArray(extraLabels) && extraLabels.length > 0) {
|
|
for (let i = 0; i < extraLabels.length; i += 2) {
|
|
const labelName = extraLabels[i]
|
|
const labelColor = extraLabels[i + 1]
|
|
if (labelName) {
|
|
fileLabels += ` [${labelName}]`
|
|
if (labelColor && labelName[labelColor]) {
|
|
consoleLabels += ` [${labelName[labelColor]}]`
|
|
} else {
|
|
consoleLabels += ` [${labelName.white}]`
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// eslint-disable-next-line no-console
|
|
console.log(`[${date}] `.magenta + `[${level}]`[color] + consoleLabels + " " + message)
|
|
$stream.write(`[${date}] [${level}]${fileLabels} ${stripColors(message)}\n`)
|
|
}
|
|
|
|
function createLogger(root) {
|
|
// eslint-disable-next-line no-useless-escape
|
|
const fileName = isTrueFromDotEnv("IS_PROD") ? new Date().toLocaleString("fr-FR", { timeZone: "UTC" }).replace(/[\/:]/g, "-").replace(/ /g, "_") : "DEV-LOG"
|
|
|
|
const logsDir = path.join(root, "logs")
|
|
|
|
if (!fs.existsSync(logsDir)) {
|
|
fs.mkdirSync(logsDir, { recursive: true })
|
|
}
|
|
|
|
const stream = fs.createWriteStream(path.join(logsDir, `${fileName}.log`), { flags: "a" })
|
|
|
|
process.on("exit", () => {
|
|
cleanup(stream)
|
|
})
|
|
|
|
process.on("SIGINT", () => {
|
|
cleanup(stream)
|
|
process.exit()
|
|
})
|
|
|
|
return {
|
|
log: (content, labels) => {
|
|
write(stream, "INFO", "green", content, labels)
|
|
},
|
|
error: (content, labels) => {
|
|
write(stream, "ERROR", "red", content, labels)
|
|
},
|
|
warn: (content, labels) => {
|
|
write(stream, "WARN", "yellow", content, labels)
|
|
},
|
|
debug: (content, labels) => {
|
|
write(stream, "DEBUG", "white", content, labels)
|
|
}
|
|
}
|
|
}
|
|
|
|
function isTrueFromDotEnv(key) {
|
|
return (process.env[key] || "").trim().toLowerCase() === "true"
|
|
}
|
|
|
|
function stripColors(string) {
|
|
if (!string || typeof string !== "string") {
|
|
return string
|
|
}
|
|
// eslint-disable-next-line no-control-regex
|
|
return string.replace(/\x1B\[[0-9;]*[mK]/g, "")
|
|
}
|
|
|
|
const logger = createLogger(process.cwd())
|
|
|
|
module.exports = logger |