Spaces:
Running
Running
; | |
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 | |