Pokemon_server / dist /server /config-loader.js
Jofthomas's picture
Upload 4781 files
5c2ed06 verified
"use strict";
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __export = (target, all) => {
for (var name in all)
__defProp(target, name, { get: all[name], enumerable: true });
};
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (let key of __getOwnPropNames(from))
if (!__hasOwnProp.call(to, key) && key !== except)
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
// If the importer is in node compatibility mode or this is not an ESM
// file that has been converted to a CommonJS file using a Babel-
// compatible transform (i.e. "__esModule" has not been set), then set
// "default" to the CommonJS "module.exports" for node compatibility.
isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
mod
));
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
var config_loader_exports = {};
__export(config_loader_exports, {
Config: () => Config,
cacheGroupData: () => cacheGroupData,
checkRipgrepAvailability: () => checkRipgrepAvailability,
load: () => load
});
module.exports = __toCommonJS(config_loader_exports);
var defaults = __toESM(require("../config/config-example"));
var import_lib = require("../lib");
/**
* Config loader
* Pokemon Showdown - http://pokemonshowdown.com/
*
* @license MIT
*/
const FLAG_PRESETS = /* @__PURE__ */ new Map([
["--no-security", ["nothrottle", "noguestsecurity", "noipchecks"]]
]);
const CONFIG_PATH = (0, import_lib.FS)("./config/config.js").path;
function load(invalidate = false) {
if (invalidate)
delete require.cache[CONFIG_PATH];
const config = { ...defaults, ...require(CONFIG_PATH) };
config.routes = { ...defaults.routes, ...config.routes };
if (config.usesqlite) {
try {
require("better-sqlite3");
} catch {
throw new Error(`better-sqlite3 is not installed or could not be loaded, but Config.usesqlite is enabled.`);
}
}
for (const [preset, values] of FLAG_PRESETS) {
if (process.argv.includes(preset)) {
for (const value of values)
config[value] = true;
}
}
cacheGroupData(config);
return config;
}
function cacheGroupData(config) {
if (config.groups) {
reportError(
`You are using a deprecated version of user group specification in config.
Support for this will be removed soon.
Please ensure that you update your config.js to the new format (see config-example.js, line 457).
`
);
} else {
config.punishgroups = /* @__PURE__ */ Object.create(null);
config.groups = /* @__PURE__ */ Object.create(null);
config.groupsranking = [];
config.greatergroupscache = /* @__PURE__ */ Object.create(null);
}
const groups = config.groups;
const punishgroups = config.punishgroups;
const cachedGroups = {};
function isPermission(key) {
return !["symbol", "id", "name", "rank", "globalGroupInPersonalRoom"].includes(key);
}
function cacheGroup(symbol, groupData) {
if (cachedGroups[symbol] === "processing") {
throw new Error(`Cyclic inheritance in group config for symbol "${symbol}"`);
}
if (cachedGroups[symbol] === true)
return;
for (const key in groupData) {
if (isPermission(key)) {
const jurisdiction = groupData[key];
if (typeof jurisdiction === "string" && jurisdiction.includes("s")) {
reportError(`Outdated jurisdiction for permission "${key}" of group "${symbol}": 's' is no longer a supported jurisdiction; we now use 'ipself' and 'altsself'`);
delete groupData[key];
}
}
}
if (groupData["inherit"]) {
cachedGroups[symbol] = "processing";
const inheritGroup = groups[groupData["inherit"]];
cacheGroup(groupData["inherit"], inheritGroup);
for (const key in inheritGroup) {
if (key in groupData)
continue;
if (!isPermission(key))
continue;
groupData[key] = inheritGroup[key];
}
delete groupData["inherit"];
}
cachedGroups[symbol] = true;
}
if (config.grouplist) {
const grouplist = config.grouplist;
const numGroups = grouplist.length;
for (let i = 0; i < numGroups; i++) {
const groupData = grouplist[i];
if (groupData.punishgroup) {
punishgroups[groupData.id] = groupData;
continue;
}
groupData.rank = numGroups - i - 1;
groups[groupData.symbol] = groupData;
config.groupsranking.unshift(groupData.symbol);
}
}
for (const sym in groups) {
const groupData = groups[sym];
cacheGroup(sym, groupData);
}
if (!punishgroups.locked) {
punishgroups.locked = {
name: "Locked",
id: "locked",
symbol: "\u203D"
};
}
if (!punishgroups.muted) {
punishgroups.muted = {
name: "Muted",
id: "muted",
symbol: "!"
};
}
}
function checkRipgrepAvailability() {
if (Config.ripgrepmodlog === void 0) {
const cwd = import_lib.FS.ROOT_PATH;
Config.ripgrepmodlog = (async () => {
try {
await import_lib.ProcessManager.exec(["rg", "--version"], { cwd });
await import_lib.ProcessManager.exec(["tac", "--version"], { cwd });
return true;
} catch {
return false;
}
})();
}
return Config.ripgrepmodlog;
}
function reportError(msg) {
setImmediate(() => global.Monitor?.error?.(msg));
}
const Config = load();
//# sourceMappingURL=config-loader.js.map