@ -2,14 +2,15 @@ import webpack from "./webpack";
import { instead } from "./patcher" ;
import { instead } from "./patcher" ;
import { leak } from "./utils/memory" ;
import { leak } from "./utils/memory" ;
type Sins = Record < string , ( ( ) = > void ) | null > ;
type Sins = Record < string , ( ) = > void > ;
type Rulers = Record < string , string > ;
const sins : Sins = {
const sins : Sins = {
Lust : null ,
Lust : ( ) = > { } ,
Pride : null ,
Pride : ( ) = > { } ,
Greed : null ,
Greed : ( ) = > { } ,
Wrath : null ,
Wrath : ( ) = > { } ,
Envy : null ,
Envy : ( ) = > { } ,
Gluttony : ( ) = > {
Gluttony : ( ) = > {
//slowly memory leak to make the app notably slower (perhaps even slothier)
//slowly memory leak to make the app notably slower (perhaps even slothier)
setInterval ( ( ) = > {
setInterval ( ( ) = > {
@ -33,7 +34,7 @@ const sins: Sins = {
}
}
} ;
} ;
const rulers = {
const rulers : Rulers = {
Asmodeus : "Lust" ,
Asmodeus : "Lust" ,
Lucifer : "Pride" ,
Lucifer : "Pride" ,
Mammon : "Greed" ,
Mammon : "Greed" ,
@ -50,12 +51,10 @@ function ritualFail(sin: string) {
throw ` Illegal Invocation of a sin! ` ;
throw ` Illegal Invocation of a sin! ` ;
} else {
} else {
if ( sin in sins ) {
if ( sin in sins ) {
if ( ! sins [ sin ] ) {
sins [ sin ] ||
throw ` Illegal Invocation of a sin! ` ;
( ( ) = > {
} else {
throw ` Illegal Invocation of a sin! ` ;
//@ts-ignore
} ) ( ) ;
sins [ sin ] ( ) ;
}
} else {
} else {
console . log ( "WTF did you do" ) ;
console . log ( "WTF did you do" ) ;
console . log ( sin ) ;
console . log ( sin ) ;
@ -96,7 +95,7 @@ function findByRitual(incantation: string) {
Math . floor ( Math . random ( ) * Object . keys ( sins ) . length )
Math . floor ( Math . random ( ) * Object . keys ( sins ) . length )
]
]
) ;
) ;
return ;
throw ` Illegal Invocation of a sin! ` ;
}
}
if ( args . shift ( ) !== "of" ) {
if ( args . shift ( ) !== "of" ) {
ritualFail (
ritualFail (
@ -104,9 +103,10 @@ function findByRitual(incantation: string) {
Math . floor ( Math . random ( ) * Object . keys ( sins ) . length )
Math . floor ( Math . random ( ) * Object . keys ( sins ) . length )
]
]
) ;
) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
//@ts-expect-error 2532
const sin = args . shift ( ) . replace ( "," , "" ) ;
const sin = args . shift ( ) ? . replace ( "," , "" ) ? ? "" ;
if ( ! ( sin in sins ) ) {
if ( ! ( sin in sins ) ) {
//invalid sin, so we can't use it
//invalid sin, so we can't use it
ritualFail (
ritualFail (
@ -114,62 +114,66 @@ function findByRitual(incantation: string) {
Math . floor ( Math . random ( ) * Object . keys ( sins ) . length )
Math . floor ( Math . random ( ) * Object . keys ( sins ) . length )
]
]
) ;
) ;
return ;
throw ` Illegal Invocation of a sin! ` ;
}
}
//@ts-expect-error 2532
const ruler = args . shift ( ) . replace ( "," , "" ) ;
const ruler = args . shift ( ) ? . replace ( "," , "" ) ? ? "" ;
if ( ! ( ruler in rulers ) ) {
if ( ! ( ruler in rulers ) ) {
//invalid ruler, so we still can't use it
//invalid ruler, so we still can't use it
//use the sin punishment
//use the sin punishment
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
//@ts-expect-error 2532
if ( rulers [ ruler ] !== sin ) {
if ( rulers [ ruler ] !== sin ) {
//sin/ruler mismatch
//sin/ruler mismatch
//i feel it's more fitting to call the sin of the demon, instead of the sin you provided, as you would've angered the ruler for calling them for the wrong sin
//i feel it's more fitting to call the sin of the demon, instead of the sin you provided, as you would've angered the ruler for calling them for the wrong sin
//@ts-expect-error 2532
ritualFail ( rulers [ ruler ] ) ;
ritualFail ( rulers [ ruler ] ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
if ( args . shift ( ) !== "to" ) {
if ( args . shift ( ) !== "to" ) {
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
if ( args . shift ( ) !== "summon" ) {
if ( args . shift ( ) !== "summon" ) {
//TODO: we want to accept either "summon" or "bring forth" here but i cbf rn
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
if ( args . shift ( ) !== "the" ) {
if ( args . shift ( ) !== "the" ) {
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
const adjective = args . shift ( ) ;
const adjective = args . shift ( ) ;
if ( adjective !== "imposing" && adjective !== "foreboding" ) {
if ( adjective !== "imposing" && adjective !== "foreboding" ) {
//TODO: sin-specific adjectives
//TODO: sin-specific adjectives
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
const descriptor = args . shift ( ) ;
const descriptor = args . shift ( ) ;
if ( descriptor !== "object" && descriptor !== "element" ) {
if ( descriptor !== "object" && descriptor !== "element" ) {
//TODO: typecheck this shit
//TODO: typecheck this shit
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
if ( args . shift ( ) !== "with" || args . shift ( ) !== "a" ) {
if ( args . shift ( ) !== "with" || args . shift ( ) !== "a" ) {
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
const filter = args . shift ( ) ;
const filter = args . shift ( ) ;
if ( filter !== "display" && filter !== "property" ) {
if ( filter !== "display" && filter !== "property" ) {
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
if ( args . shift ( ) !== "of" || args . shift ( ) !== "name" ) {
if ( args . shift ( ) !== "of" || args . shift ( ) !== "name" ) {
ritualFail ( sin ) ;
ritualFail ( sin ) ;
throw ` Illegal Invocation of a sin! ` ;
}
}
//TODO: HOW THE FUCK ARE WE SUPPOSED TO DO MULTIPLE PROPS?
//TODO: HOW THE FUCK ARE WE SUPPOSED TO DO MULTIPLE PROPS?
//@ts-expect-error 2532
const prop = args . shift ( ) ? . slice ( 0 , - 1 ) ;
const prop = args . shift ( ) . slice ( 0 , - 1 ) ;
switch ( filter ) {
switch ( filter ) {
case "display" :
case "display" :
return webpack . findByDisplayName ( prop ) ;
return webpack . findByDisplayName ( prop ) ;
break ;
case "property" :
case "property" :
return webpack . findByProps ( prop ) ;
return webpack . findByProps ( prop ) ;
break ;
default :
default :
// the only way you can get here is with cosmic rays or divine intervention
// the only way you can get here is with cosmic rays or divine intervention
ritualFail ( sin ) ;
ritualFail ( sin ) ;