Lightcord/LightcordApi/src/modules/WebpackLoader.ts

57 lines
2.0 KiB
TypeScript

const BDModules:typeof window.BDModules = window.BDModules || require("./BDModules")
export default new class WebpackLoader {
constructor(){}
get(id: number):any{
return BDModules.get(id)
}
find(filter: (mod:any) => boolean):any{
let result = BDModules.get(filter)[0]
if(!result){
console.warn(filter, "couldn't find the module.")
}
return result
}
findByUniqueProperties(props:(string|number)[]):any{
return BDModules.get((mod) => {
if(mod.__esModule && ("default" in mod)){
let doesMatch = true
for(let prop of props){
if(!Object.prototype.hasOwnProperty.call(mod.default, prop))doesMatch = false
}
if(doesMatch)return true
}
for(let prop of props){
if(!Object.prototype.hasOwnProperty.call(mod, prop))return false
}
return true
})[0]
}
filter(filter: (mod:any) => boolean):any[]{
return BDModules.get(filter)
}
filterByUniqueProperties(props:(string|number)[]):any{
return BDModules.get((mod) => {
if(mod.__esModule && ("default" in mod)){
let doesMatch = true
for(let prop of props){
if(!Object.prototype.hasOwnProperty.call(mod.default, prop))doesMatch = false
}
if(doesMatch)return true
}
for(let prop of props){
if(!Object.prototype.hasOwnProperty.call(mod, prop))return false
}
return true
})
}
}
export class WebpackLoaderError extends Error {
constructor(message:string = ""){
message += "\n\tThis error is related to Lightcord not being able to find a WebpackModule. \n\tPlease show this error and a few lines of logs above this error to the devs. \n\tOpen an issue on https://github.com/Lightcord/Lightcord or in our discord server."
super(message)
this.name = "WebpackLoaderError"
}
}