Repository navigation
Expand file tree
/
Copy pathaliasManager.js
More file actions
executable file
·68 lines (60 loc) · 2.24 KB
/
Copy pathaliasManager.js
File metadata and controls
executable file
·68 lines (60 loc) · 2.24 KB
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
const fs = require('fs');
const path = require('path');
const formatter = require('./formatter.js');
const { writeFileAtomic } = require('./utils/fileUtil.js');
// The bundled file is only the default seed; the user's copy lives next to config.yml
// (the same file the launcher's Aliases page edits).
const defaultAliasesPath = path.join(__dirname, 'aliases.json');
const aliasesPath = process.env.USER_DATA_PATH
? path.join(process.env.USER_DATA_PATH, 'aliases.json')
: defaultAliasesPath;
let aliases = {};
function normalize(rawAliases) {
const result = {};
for (const [key, value] of Object.entries(rawAliases || {})) {
if (typeof value === 'string') result[key.toLowerCase()] = value;
}
return result;
}
function loadAliases() {
try {
if (!fs.existsSync(aliasesPath)) {
formatter.log(`aliases.json not found. Creating it from the defaults.`);
const defaults = fs.existsSync(defaultAliasesPath) ? fs.readFileSync(defaultAliasesPath, 'utf8') : '{}';
writeFileAtomic(aliasesPath, defaults);
}
let fileContent = fs.readFileSync(aliasesPath, 'utf8');
if (fileContent.charCodeAt(0) === 0xFEFF) {
fileContent = fileContent.slice(1);
}
aliases = normalize(JSON.parse(fileContent));
formatter.log(`Successfully loaded ${Object.keys(aliases).length} aliases from aliases.json.`);
} catch (error) {
// Keep the previously loaded aliases if the file is mid-edit or invalid.
formatter.log(`[ERROR] Failed to load or parse aliases.json: ${error.message}`);
}
}
function saveAliases(newAliases) {
try {
writeFileAtomic(aliasesPath, JSON.stringify(newAliases, null, 4));
aliases = normalize(newAliases);
} catch (error) {
formatter.log(`[ERROR] Failed to save aliases.json: ${error.message}`);
}
}
function getAliases() {
return aliases;
}
// Reload when the launcher saves new aliases, so no proxy restart is needed.
function watchAliases() {
fs.watchFile(aliasesPath, { interval: 2000 }, (curr, prev) => {
if (curr.mtimeMs !== prev.mtimeMs) loadAliases();
}).unref();
}
loadAliases();
module.exports = {
loadAliases,
saveAliases,
getAliases,
watchAliases,
};