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 { installExt } from "./ipcMain/extensions";
|
||||
import { readSettings } from "./ipcMain/index";
|
||||
import { onceDefined } from "./utils/onceDefined";
|
||||
|
||||
console.log("[Vencord] Starting up...");
|
||||
|
||||
|
@ -74,15 +75,9 @@ require.cache[electronPath]!.exports = {
|
|||
};
|
||||
|
||||
// Patch appSettings to force enable devtools
|
||||
Object.defineProperty(global, "appSettings", {
|
||||
set: (v: typeof global.appSettings) => {
|
||||
v.set("DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING", true);
|
||||
// @ts-ignore
|
||||
delete global.appSettings;
|
||||
global.appSettings = v;
|
||||
},
|
||||
configurable: true
|
||||
});
|
||||
onceDefined(global, "appSettings", s =>
|
||||
s.set("DANGEROUS_ENABLE_DEVTOOLS_ONLY_ENABLE_IF_YOU_KNOW_WHAT_YOURE_DOING", true)
|
||||
);
|
||||
|
||||
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 * from "./misc";
|
||||
export * as Modals from "./modal";
|
||||
export * from "./onceDefined";
|
||||
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();
|
||||
}
|
||||
|
||||
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) {
|
||||
if (typeof filter !== "function")
|
||||
throw new Error("Invalid filter. Expected a function got " + typeof filter);
|
||||
|
@ -92,10 +100,12 @@ export function find(filter: FilterFn, getDefault = true, isWaitFor = false) {
|
|||
if (!isWaitFor) {
|
||||
const err = new Error("Didn't find module matching this filter");
|
||||
if (IS_DEV) {
|
||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||
throw err;
|
||||
if (!devToolsOpen)
|
||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||
throw err;
|
||||
} else {
|
||||
logger.warn(err);
|
||||
}
|
||||
logger.warn(err);
|
||||
}
|
||||
|
||||
return null;
|
||||
|
@ -196,10 +206,12 @@ export function bulk(...filterFns: FilterFn[]) {
|
|||
if (found !== length) {
|
||||
const err = new Error(`Got ${length} filters, but only found ${found} modules!`);
|
||||
if (IS_DEV) {
|
||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||
throw err;
|
||||
if (!devToolsOpen)
|
||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||
throw err;
|
||||
} else {
|
||||
logger.warn(err);
|
||||
}
|
||||
logger.warn(err);
|
||||
}
|
||||
|
||||
return results;
|
||||
|
@ -219,10 +231,12 @@ export function findModuleId(code: string) {
|
|||
|
||||
const err = new Error("Didn't find module with code:\n" + code);
|
||||
if (IS_DEV) {
|
||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||
throw err;
|
||||
if (!devToolsOpen)
|
||||
// Strict behaviour in DevBuilds to fail early and make sure the issue is found
|
||||
throw err;
|
||||
} else {
|
||||
logger.warn(err);
|
||||
}
|
||||
logger.warn(err);
|
||||
|
||||
return null;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue