2022-10-21 23:17:06 +00:00
/ *
* 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 / > .
* /
2022-11-28 12:37:55 +00:00
import { Devs } from "@utils/constants" ;
import definePlugin from "@utils/types" ;
2023-12-09 20:36:58 +00:00
import { React } from "@webpack/common" ;
2022-10-11 23:25:50 +00:00
let ERROR_CODES : any ;
export default definePlugin ( {
name : "ReactErrorDecoder" ,
description : 'Replaces "Minifed React Error" with the actual error.' ,
2023-12-09 20:36:58 +00:00
authors : [ Devs . Cyn , Devs . maisymoe ] ,
2022-10-11 23:25:50 +00:00
patches : [
{
find : '"https://reactjs.org/docs/error-decoder.html?invariant="' ,
replacement : {
match : /(function .\(.\)){(for\(var .="https:\/\/reactjs\.org\/docs\/error-decoder\.html\?invariant="\+.,.=1;.<arguments\.length;.\+\+\).\+="&args\[\]="\+encodeURIComponent\(arguments\[.\]\);return"Minified React error #"\+.\+"; visit "\+.\+" for the full message or use the non-minified dev environment for full errors and additional helpful warnings.")}/ ,
replace : ( _ , func , original ) = >
2023-12-09 20:36:58 +00:00
` ${ func } {var decoded= $ self.decodeError.apply(null, arguments);if(decoded)return decoded; ${ original } } ` ,
2022-10-11 23:25:50 +00:00
} ,
} ,
] ,
async start() {
2023-12-09 20:36:58 +00:00
const CODES_URL = ` https://raw.githubusercontent.com/facebook/react/v ${ React . version } /scripts/error-codes/codes.json ` ;
2022-10-11 23:25:50 +00:00
ERROR_CODES = await fetch ( CODES_URL )
. then ( res = > res . json ( ) )
. catch ( e = > console . error ( "[ReactErrorDecoder] Failed to fetch React error codes\n" , e ) ) ;
} ,
stop() {
ERROR_CODES = undefined ;
} ,
decodeError ( code : number , . . . args : any ) {
let index = 0 ;
return ERROR_CODES ? . [ code ] ? . replace ( /%s/g , ( ) = > {
const arg = args [ index ] ;
index ++ ;
return arg ;
} ) ;
} ,
} ) ;