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…
	
	Add table
		Add a link
		
	
		Reference in a new issue