From a8eeb917e22ef72905d448e159d70375ebf77ba6 Mon Sep 17 00:00:00 2001 From: AAGaming Date: Sat, 9 Mar 2024 17:13:39 -0500 Subject: [PATCH] feat(classMapper): add class mapper thanks valve --- src/class-mapper.ts | 34 ++++++++++++++++++++++++++++++++++ src/index.ts | 1 + 2 files changed, 35 insertions(+) create mode 100644 src/class-mapper.ts diff --git a/src/class-mapper.ts b/src/class-mapper.ts new file mode 100644 index 0000000..acd500a --- /dev/null +++ b/src/class-mapper.ts @@ -0,0 +1,34 @@ +import { Module, findAllModules } from "./webpack"; + +export interface ClassModule { + [name: string]: string +}; + +export const classMap: ClassModule[] = findAllModules((m: Module) => { + if (typeof m == "object" && !m.__esModule) { + const keys = Object.keys(m); + // special case some libraries + if (keys.length == 1 && m.version) return false; + // special case localization + if (keys.length > 1000 && m.AboutSettings) return false; + + return keys.length > 0 && keys.every(k => !Object.getOwnPropertyDescriptor(m, k)?.get && typeof m[k] == "string") + } + return false; +}); + +export function findClass(name: string): string | void { + return classMap.find(m => m?.[name])?.[name]; +} + +export function findClassModule(filter: (module: any) => boolean) : ClassModule | void { + return classMap.find(m => filter(m)); +} + +export function unminifyClass(minifiedClass: string): string | void { + for (let m of classMap) { + for (let className of Object.keys(m)) { + if (m[className] == minifiedClass) return className; + } + } +} \ No newline at end of file diff --git a/src/index.ts b/src/index.ts index 2ebe40e..dda21df 100644 --- a/src/index.ts +++ b/src/index.ts @@ -6,3 +6,4 @@ export * from './deck-hooks'; export * from './plugin'; export * from './webpack'; export * from './utils'; +export * from './class-mapper';