File size: 5,939 Bytes
5c2ed06
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
"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