diff --git a/src/plugins/_api/badges/index.tsx b/src/plugins/_api/badges/index.tsx index 716c9837..f841165f 100644 --- a/src/plugins/_api/badges/index.tsx +++ b/src/plugins/_api/badges/index.tsx @@ -88,19 +88,17 @@ export default definePlugin({ find: ".description,delay:", replacement: [ { - // alt: "", aria-hidden: false, src: originalSrc - match: /alt:" ","aria-hidden":!0,src:(?=.{0,20}(\i)\.icon)/, - // ...badge.props, ..., src: badge.image ?? ... - replace: "...$1.props,$& $1.image??" + match: /(alt:" ","aria-hidden":!0,src:)(.{0,20}(\i)\.icon\))/, + replace: (_, rest, originalSrc, badge) => `...${badge}.props,${rest}${badge}.image??(${originalSrc})` }, { match: /(?<="aria-label":(\i)\.description,.{0,200})children:/, - replace: "children:$1.component ? $self.renderBadgeComponent({ ...$1 }) :" + replace: "children:$1.component?$self.renderBadgeComponent({...$1}) :" }, // conditionally override their onClick with badge.onClick if it exists { match: /href:(\i)\.link/, - replace: "...($1.onClick && { onClick: vcE => $1.onClick(vcE, $1) }),$&" + replace: "...($1.onClick&&{onClick:vcE=>$1.onClick(vcE,$1)}),$&" } ] } diff --git a/src/plugins/consoleShortcuts/index.ts b/src/plugins/consoleShortcuts/index.ts index f455dfbe..f85d649a 100644 --- a/src/plugins/consoleShortcuts/index.ts +++ b/src/plugins/consoleShortcuts/index.ts @@ -153,13 +153,7 @@ function makeShortcuts() { openModal: { getter: () => ModalAPI.openModal }, openModalLazy: { getter: () => ModalAPI.openModalLazy }, - Stores: { - getter: () => Object.fromEntries( - Common.Flux.Store.getAll() - .map(store => [store.getName(), store] as const) - .filter(([name]) => name.length > 1) - ) - } + Stores: Webpack.fluxStores }; } diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts index aff37825..26d9c0d7 100644 --- a/src/webpack/webpack.ts +++ b/src/webpack/webpack.ts @@ -20,6 +20,7 @@ import { makeLazy, proxyLazy } from "@utils/lazy"; import { LazyComponent } from "@utils/lazyReact"; import { Logger } from "@utils/Logger"; import { canonicalizeMatch } from "@utils/patches"; +import { FluxStore } from "@webpack/types"; import { traceFunction } from "../debug/Tracer"; import { Flux } from "./common"; @@ -37,6 +38,8 @@ export const onceReady = new Promise(r => _resolveReady = r); export let wreq: WebpackRequire; export let cache: WebpackRequire["c"]; +export const fluxStores: Record = {}; + export type FilterFn = (mod: any) => boolean; export type PropsFilter = Array; @@ -430,9 +433,24 @@ export function findByCodeLazy(...code: CodeFilter) { * Find a store by its displayName */ export function findStore(name: StoreNameFilter) { - const res = Flux.Store.getAll - ? Flux.Store.getAll().find(filters.byStoreName(name)) - : find(filters.byStoreName(name), { isIndirect: true }); + let res = fluxStores[name] as any; + if (res == null) { + for (const store of Flux.Store.getAll?.() ?? []) { + const storeName = store.getName(); + + if (storeName === name) { + res = store; + } + + if (fluxStores[storeName] == null) { + fluxStores[storeName] = store; + } + } + + if (res == null) { + res = find(filters.byStoreName(name), { isIndirect: true }); + } + } if (!res) handleModuleNotFound("findStore", name);