Webpack: Do not emit errors if devtools open
This commit is contained in:
parent
cb7469afad
commit
65620f4976
4 changed files with 76 additions and 18 deletions
|
@ -23,6 +23,7 @@ import { dirname, join } from "path";
|
||||||
import { initIpc } from "./ipcMain";
|
import { initIpc } from "./ipcMain";
|
||||||
import { installExt } from "./ipcMain/extensions";
|
import { installExt } from "./ipcMain/extensions";
|
||||||
import { readSettings } from "./ipcMain/index";
|
import { readSettings } from "./ipcMain/index";
|
||||||
|
import { onceDefined } from "./utils/onceDefined";
|
||||||
|
|
||||||
console.log("[Vencord] Starting up...");
|
console.log("[Vencord] Starting up...");
|
||||||
|
|
||||||
|
@ -74,15 +75,9 @@ require.cache[electronPath]!.exports = {
|
||||||
};
|
};
|
||||||
|
|
||||||
// Patch appSettings to force enable devtools
|
// Patch appSettings to force enable devtools
|
||||||
Object.defineProperty(global, "appSettings", {
|
onceDefined(global, "appSettings", s =>
|
||||||
set: (v: typeof global.appSettings) => {
|
s.set("DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING", true)
|
||||||
v.set("DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING", true);
|
);
|
||||||
// @ts-ignore
|
|
||||||
delete global.appSettings;
|
|
||||||
global.appSettings = v;
|
|
||||||
},
|
|
||||||
configurable: true
|
|
||||||
});
|
|
||||||
|
|
||||||
process.env.DATA_DIR = join(app.getPath("userData"), "..", "Vencord");
|
process.env.DATA_DIR = join(app.getPath("userData"), "..", "Vencord");
|
||||||
|
|
||||||
|
|
|
@ -24,4 +24,6 @@ export { default as IpcEvents } from "./IpcEvents";
|
||||||
export { default as Logger } from "./logger";
|
export { default as Logger } from "./logger";
|
||||||
export * from "./misc";
|
export * from "./misc";
|
||||||
export * as Modals from "./modal";
|
export * as Modals from "./modal";
|
||||||
|
export * from "./onceDefined";
|
||||||
export * from "./proxyLazy";
|
export * from "./proxyLazy";
|
||||||
|
export * from "./Queue";
|
||||||
|
|
47
src/utils/onceDefined.ts
Normal file
47
src/utils/onceDefined.ts
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/*
|
||||||
|
* Vencord, a modification for Discord's desktop app
|
||||||
|
* Copyright (c) 2022 Vendicated and contributors
|
||||||
|
*
|
||||||
|
* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, either version 3 of the License, or
|
||||||
|
* (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <https://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
import type { LiteralUnion } from "type-fest";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Wait for a property to be defined on the target, then call the callback with
|
||||||
|
* the value
|
||||||
|
* @param target Object
|
||||||
|
* @param property Property to be defined
|
||||||
|
* @param callback Callback
|
||||||
|
*
|
||||||
|
* @example onceDefined(window, "webpackChunkdiscord_app", wpInstance => wpInstance.push(...));
|
||||||
|
*/
|
||||||
|
export function onceDefined<T, P extends LiteralUnion<keyof T, PropertyKey>>(
|
||||||
|
target: T, property: P, callback: (v: P extends keyof T ? T[P] : any) => void
|
||||||
|
): void {
|
||||||
|
const propertyAsAny = property as any;
|
||||||
|
|
||||||
|
if (property in target)
|
||||||
|
return void callback(target[propertyAsAny]);
|
||||||
|
|
||||||
|
Object.defineProperty(target, property, {
|
||||||
|
set(v) {
|
||||||
|
delete target[propertyAsAny];
|
||||||
|
target[propertyAsAny] = v;
|
||||||
|
callback(v);
|
||||||
|
},
|
||||||
|
configurable: true,
|
||||||
|
enumerable: false
|
||||||
|
});
|
||||||
|
}
|
|
@ -66,6 +66,14 @@ export function _initWebpack(instance: typeof window.webpackChunkdiscord_app) {
|
||||||
instance.pop();
|
instance.pop();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (IS_DEV && !IS_WEB) {
|
||||||
|
var devToolsOpen = false;
|
||||||
|
// At this point in time, DiscordNative has not been exposed yet, so setImmediate is needed
|
||||||
|
setTimeout(() => {
|
||||||
|
DiscordNative/* just to make sure */?.window.setDevtoolsCallbacks(() => devToolsOpen = true, () => devToolsOpen = false);
|
||||||
|
}, 0);
|
||||||
|
}
|
||||||
|
|
||||||
export function find(filter: FilterFn, getDefault = true, isWaitFor = false) {
|
export function find(filter: FilterFn, getDefault = true, isWaitFor = false) {
|
||||||
if (typeof filter !== "function")
|
if (typeof filter !== "function")
|
||||||
throw new Error("Invalid filter. Expected a function got " + typeof filter);
|
throw new Error("Invalid filter. Expected a function got " + typeof filter);
|
||||||
|
@ -92,11 +100,13 @@ export function find(filter: FilterFn, getDefault = true, isWaitFor = false) {
|
||||||
if (!isWaitFor) {
|
if (!isWaitFor) {
|
||||||
const err = new Error("Didn't find module matching this filter");
|
const err = new Error("Didn't find module matching this filter");
|
||||||
if (IS_DEV) {
|
if (IS_DEV) {
|
||||||
|
if (!devToolsOpen)
|
||||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||||
throw err;
|
throw err;
|
||||||
}
|
} else {
|
||||||
logger.warn(err);
|
logger.warn(err);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
@ -196,11 +206,13 @@ export function bulk(...filterFns: FilterFn[]) {
|
||||||
if (found !== length) {
|
if (found !== length) {
|
||||||
const err = new Error(`Got ${length} filters, but only found ${found} modules!`);
|
const err = new Error(`Got ${length} filters, but only found ${found} modules!`);
|
||||||
if (IS_DEV) {
|
if (IS_DEV) {
|
||||||
|
if (!devToolsOpen)
|
||||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||||
throw err;
|
throw err;
|
||||||
}
|
} else {
|
||||||
logger.warn(err);
|
logger.warn(err);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return results;
|
return results;
|
||||||
}
|
}
|
||||||
|
@ -219,10 +231,12 @@ export function findModuleId(code: string) {
|
||||||
|
|
||||||
const err = new Error("Didn't find module with code:\n" + code);
|
const err = new Error("Didn't find module with code:\n" + code);
|
||||||
if (IS_DEV) {
|
if (IS_DEV) {
|
||||||
|
if (!devToolsOpen)
|
||||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||||
throw err;
|
throw err;
|
||||||
}
|
} else {
|
||||||
logger.warn(err);
|
logger.warn(err);
|
||||||
|
}
|
||||||
|
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue