(factory: () => T): T {
diff --git a/src/utils/quickCss.ts b/src/utils/quickCss.ts
index 0ce1f588..1f9f235f 100644
--- a/src/utils/quickCss.ts
+++ b/src/utils/quickCss.ts
@@ -16,7 +16,8 @@
* along with this program. If not, see .
*/
-import { addSettingsListener, Settings } from "../api/settings";
+import { addSettingsListener, Settings } from "@api/settings";
+
import IpcEvents from "./IpcEvents";
let style: HTMLStyleElement;
diff --git a/src/utils/settingsSync.ts b/src/utils/settingsSync.ts
index ecf66652..5cd81e7e 100644
--- a/src/utils/settingsSync.ts
+++ b/src/utils/settingsSync.ts
@@ -16,7 +16,8 @@
* along with this program. If not, see .
*/
-import { Toasts } from "../webpack/common";
+import { Toasts } from "@webpack/common";
+
import IpcEvents from "./IpcEvents";
import Logger from "./Logger";
diff --git a/src/utils/types.ts b/src/utils/types.ts
index 30c603f4..310fbea0 100644
--- a/src/utils/types.ts
+++ b/src/utils/types.ts
@@ -16,10 +16,9 @@
* along with this program. If not, see .
*/
+import { Command } from "@api/Commands";
import { Promisable } from "type-fest";
-import { Command } from "../api/Commands";
-
// exists to export default definePlugin({...})
export default function definePlugin(p: P & Record) {
return p;
diff --git a/src/webpack/common.tsx b/src/webpack/common.tsx
index 32f47e66..e606f168 100644
--- a/src/webpack/common.tsx
+++ b/src/webpack/common.tsx
@@ -16,31 +16,33 @@
* along with this program. If not, see .
*/
+import { LazyComponent } from "@utils/misc";
+import { proxyLazy } from "@utils/proxyLazy";
import type Components from "discord-types/components";
import { User } from "discord-types/general";
import type Other from "discord-types/other";
import type Stores from "discord-types/stores";
-import { LazyComponent, lazyWebpack } from "../utils/misc";
-import { proxyLazy } from "../utils/proxyLazy";
-import { _resolveReady, filters, findByCode, mapMangledModule, mapMangledModuleLazy, waitFor } from "./webpack";
+import { _resolveReady, filters, findByCode, findByCodeLazy, findByPropsLazy, mapMangledModule, mapMangledModuleLazy, waitFor } from "./webpack";
-export const Margins = lazyWebpack(filters.byProps("marginTop20"));
+export const Margins = findByPropsLazy("marginTop20");
export let FluxDispatcher: Other.FluxDispatcher;
-export const Flux = lazyWebpack(filters.byProps("connectStores"));
+export const Flux = findByPropsLazy("connectStores");
export let React: typeof import("react");
-export const ReactDOM: typeof import("react-dom") = lazyWebpack(filters.byProps("createPortal", "render"));
+export const ReactDOM: typeof import("react-dom") = findByPropsLazy("createPortal", "render");
-export const RestAPI = lazyWebpack(filters.byProps("getAPIBaseURL", "get"));
-export const moment: typeof import("moment") = lazyWebpack(filters.byProps("parseTwoDigitYear"));
+export const RestAPI = findByPropsLazy("getAPIBaseURL", "get");
+export const moment: typeof import("moment") = findByPropsLazy("parseTwoDigitYear");
-export const MessageStore = lazyWebpack(filters.byProps("getRawMessages")) as Omit & { getMessages(chanId: string): any; };
-export const PermissionStore = lazyWebpack(filters.byProps("can", "getGuildPermissions"));
-export const PrivateChannelsStore = lazyWebpack(filters.byProps("openPrivateChannel"));
-export const GuildChannelStore = lazyWebpack(filters.byProps("getChannels"));
-export const ReadStateStore = lazyWebpack(filters.byProps("lastMessageId"));
-export const PresenceStore = lazyWebpack(filters.byProps("setCurrentUserOnConnectionOpen"));
+export const MessageStore = findByPropsLazy("getRawMessages") as Omit & {
+ getMessages(chanId: string): any;
+};
+export const PermissionStore = findByPropsLazy("can", "getGuildPermissions");
+export const PrivateChannelsStore = findByPropsLazy("openPrivateChannel");
+export const GuildChannelStore = findByPropsLazy("getChannels");
+export const ReadStateStore = findByPropsLazy("lastMessageId");
+export const PresenceStore = findByPropsLazy("setCurrentUserOnConnectionOpen");
export let GuildStore: Stores.GuildStore;
export let UserStore: Stores.UserStore;
export let SelectedChannelStore: Stores.SelectedChannelStore;
@@ -121,7 +123,7 @@ export const Toasts = {
};
export const UserUtils = {
- fetchUser: lazyWebpack(filters.byCode(".USER(", "getUser")) as (id: string) => Promise,
+ fetchUser: findByCodeLazy(".USER(", "getUser") as (id: string) => Promise,
};
export const Clipboard = mapMangledModuleLazy('document.queryCommandEnabled("copy")||document.queryCommandSupported("copy")', {
diff --git a/src/webpack/patchWebpack.ts b/src/webpack/patchWebpack.ts
index e17ddfcf..273a0623 100644
--- a/src/webpack/patchWebpack.ts
+++ b/src/webpack/patchWebpack.ts
@@ -16,8 +16,9 @@
* along with this program. If not, see .
*/
-import { WEBPACK_CHUNK } from "../utils/constants";
-import Logger from "../utils/Logger";
+import { WEBPACK_CHUNK } from "@utils/constants";
+import Logger from "@utils/Logger";
+
import { _initWebpack } from ".";
let webpackChunk: any[];
diff --git a/src/webpack/webpack.ts b/src/webpack/webpack.ts
index bd06b030..0bbd8150 100644
--- a/src/webpack/webpack.ts
+++ b/src/webpack/webpack.ts
@@ -16,11 +16,11 @@
* along with this program. If not, see .
*/
+import Logger from "@utils/Logger";
+import { proxyLazy } from "@utils/proxyLazy";
import type { WebpackInstance } from "discord-types/other";
import { traceFunction } from "../debug/Tracer";
-import Logger from "../utils/Logger";
-import { proxyLazy } from "../utils/proxyLazy";
const logger = new Logger("Webpack");
@@ -113,6 +113,13 @@ export const find = traceFunction("find", function find(filter: FilterFn, getDef
return null;
});
+/**
+ * find but lazy
+ */
+export function findLazy(filter: FilterFn, getDefault = true) {
+ return proxyLazy(() => find(filter, getDefault));
+}
+
export function findAll(filter: FilterFn, getDefault = true) {
if (typeof filter !== "function")
throw new Error("Invalid filter. Expected a function got " + typeof filter);
@@ -291,6 +298,13 @@ export function findByProps(...props: string[]) {
return find(filters.byProps(...props));
}
+/**
+ * findByProps but lazy
+ */
+export function findByPropsLazy(...props: string[]) {
+ return findLazy(filters.byProps(...props));
+}
+
/**
* Find all modules that have the specified properties
*/
@@ -305,6 +319,13 @@ export function findByCode(...code: string[]) {
return find(filters.byCode(...code));
}
+/**
+ * findByCode but lazy
+ */
+export function findByCodeLazy(...code: string[]) {
+ return findLazy(filters.byCode(...code));
+}
+
/**
* Wait for a module that matches the provided filter to be registered,
* then call the callback with the module as the first argument
diff --git a/tsconfig.json b/tsconfig.json
index aa125329..a55c1fe3 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -14,7 +14,16 @@
"strict": true,
"noImplicitAny": false,
"target": "ESNEXT",
- "jsx": "preserve"
+ "jsx": "preserve",
+
+ "baseUrl": "./src/",
+ "paths": {
+ "@webpack": ["./webpack"],
+ "@webpack/common": ["./webpack/common"],
+ "@utils/*": ["./utils/*"],
+ "@api/*": ["./api/*"],
+ "@components/*": ["./components/*"]
+ }
},
"include": ["src/**/*"]
}