From 8cf107ed12bd4d8cd7b9b9d6d83324c9cd1ea703 Mon Sep 17 00:00:00 2001 From: PalmDevs Date: Mon, 19 May 2025 02:19:05 +0700 Subject: [PATCH] feat(lib/discord/common/flux): export `getStore` and `byStoreName` --- lib/discord/src/common/flux.ts | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/lib/discord/src/common/flux.ts b/lib/discord/src/common/flux.ts index 2364953..cd97297 100644 --- a/lib/discord/src/common/flux.ts +++ b/lib/discord/src/common/flux.ts @@ -1,6 +1,14 @@ -import { byDependencies, byProps, preferExports, relativeDep } from '@revenge-mod/modules/finders/filters' +import { + byDependencies, + byProps, + createFilterGenerator, + preferExports, + relativeDep, + type Filter, +} from '@revenge-mod/modules/finders/filters' import { lookupModule } from '@revenge-mod/modules/finders/lookup' import { waitForModules } from '@revenge-mod/modules/finders/wait' +import { noopFalse } from '@revenge-mod/utils/callbacks' import type { Metro } from '@revenge-mod/modules/types' import type { DiscordModules } from '../types' @@ -28,3 +36,20 @@ export const Stores = new Proxy(_stores, { ownKeys: () => Reflect.ownKeys(_stores), get: (_, name) => _stores[name as string], }) + +export function getStore(name: string, callback: (store: DiscordModules.Flux.Store) => void) { + const store = Stores[name] + if (store) { + callback(store) + return noopFalse + } + + return waitForModules(byStoreName(name), callback) +} + +export type ByStoreName = (name: string) => Filter> + +export const byStoreName = createFilterGenerator<[name: string]>( + ([name], _, exports) => exports.getName?.length === 0 && exports.getName() === name, + ([name]) => `revenge.discord.byStoreName(${name})`, +) as ByStoreName