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
|
import path from "path";
import fs from "fs";
import { formatFile } from "@fosscord/util";
console.log('[TestClient] Loading private assets...');
const privateAssetsRoot = path.join(__dirname, "..", "..", "..", "assets", "private");
const iconsRoot = path.join(privateAssetsRoot, "icons");
const icons = new Map<string, Buffer>();
fs.readdirSync(iconsRoot).forEach(file => {
const fileName = path.basename(file);
//check if dir
if(fs.lstatSync(path.join(iconsRoot, file)).isDirectory()){
return;
}
icons.set(fileName,fs.readFileSync(path.join(iconsRoot,file)) as Buffer);
});
fs.readdirSync(path.join(iconsRoot, "custom")).forEach(file => {
const fileName = path.basename(file);
if(fs.lstatSync(path.join(iconsRoot,"custom", file)).isDirectory()){
return;
}
icons.set(fileName,fs.readFileSync(path.join(iconsRoot,"custom",file)) as Buffer);
});
console.log('[TestClient] Patcher ready!');
export function patchFile(filePath: string, content: string): string {
//console.log(`[TestClient] Patching ${filePath}`);
let startTime = Date.now();
content = formatFile(filePath, content);
//content = prettier(filePath, content);
content = autoPatch(filePath, content);
console.log(`[TestClient] Patched ${filePath} in ${Date.now() - startTime}ms`);
return content;
}
function prettier(filePath: string, content: string): string{
let prettier = require("prettier");
let parser;
filePath = filePath.toLowerCase().split('?')[0];
if(filePath.endsWith(".js")) {
parser = "babel";
} else if (filePath.endsWith(".ts")){
parser = "typescript";
} else if(filePath.endsWith(".css")){
parser = "css";
} else if(filePath.endsWith(".json")){
parser = "json";
}
else {
console.log(`[TestClient] Skipping prettier for ${filePath}, unknown file type!`);
return content;
}
content = prettier.format(content, {
tabWidth: 4,
useTabs: true,
printWidth: 140,
trailingComma: "none",
parser
});
console.log(`[TestClient] Prettified ${filePath}!`);
return content;
}
function autoPatch(filePath: string, content: string): string {
//patches
content = content.replaceAll('isDiscordGatewayPlaintextSet = function () {' , 'isDiscordGatewayPlaintextSet = function () { return window.GLOBAL_ENV.PLAINTEXT_GATEWAY;');
//remove nitro references
content = content.replace(/Discord Nitro/g, "Fosscord Premium");
content = content.replace(/"Nitro"/g, "\"Premium\"");
content = content.replace(/Nitro /g, "Premium ");
content = content.replace(/ Nitro/g, " Premium");
content = content.replace(/\[Nitro\]/g, "[Premium]");
content = content.replace(/\*Nitro\*/g, "*Premium*");
content = content.replace(/\"Nitro \. /g, "\"Premium. ");
//remove discord references
content = content.replace(/ Discord /g, " Fosscord ");
content = content.replace(/Discord /g, "Fosscord ");
content = content.replace(/ Discord/g, " Fosscord");
content = content.replace(/Discord Premium/g, "Fosscord Premium");
content = content.replace(/Discord Nitro/g, "Fosscord Premium");
content = content.replace(/Discord's/g, "Fosscord's");
//content = content.replace(/DiscordTag/g, "FosscordTag");
content = content.replace(/\*Discord\*/g, "*Fosscord*");
//server -> guild
content = content.replace(/"Server"/g, "\"Guild\"");
content.replaceAll("server.\"","guild.\"");
content.replaceAll(" server "," guild ");
content.replaceAll(" Server "," Guild ");
content.replaceAll("\"Server","\"Guild");
//change some vars
content = content.replace('dsn: "https://fa97a90475514c03a42f80cd36d147c4@sentry.io/140984"', "dsn: (/true/.test(localStorage.sentryOptIn)?'https://6bad92b0175d41a18a037a73d0cff282@sentry.thearcanebrony.net/12':'')");
content = content.replace('t.DSN = "https://fa97a90475514c03a42f80cd36d147c4@sentry.io/140984"', "t.DSN = (/true/.test(localStorage.sentryOptIn)?'https://6bad92b0175d41a18a037a73d0cff282@sentry.thearcanebrony.net/12':'')");
content = content.replace('--brand-experiment: hsl(235, calc(var(--saturation-factor, 1) * 85.6%), 64.7%);', '--brand-experiment: hsl(var(--brand-hue), calc(var(--saturation-factor, 1) * 85.6%), 50%);');
content = content.replaceAll(/--brand-experiment-(\d{1,4}): hsl\(235/g, '--brand-experiment-\$1: hsl(var(--brand-hue)')
//logos
content = content.replace(/d: "M23\.0212.*/, `d: "${icons.get("homeIcon.path")!.toString()}"`);
content = content.replace('width: n, height: o, viewBox: "0 0 28 20"', 'width: 48, height: 48, viewBox: "0 0 48 48"');
//save some time on load resolving asset urls...
content = content.replaceAll('e.exports = n.p + "', 'e.exports = "/assets/');
content = content.replaceAll('e.exports = r.p + "', 'e.exports = "/assets/');
//console.log(`[TestClient] Autopatched ${path.basename(filePath)}!`);
return content;
}
|