+1
-1
.prettierrc
+1
-1
.prettierrc
+1
-1
package.json
+1
-1
package.json
···
···
+1
-2
packages/browser/src/background.js
+1
-2
packages/browser/src/background.js
+4
-12
packages/core-extensions/src/contextMenu/index.tsx
+4
-12
packages/core-extensions/src/contextMenu/index.tsx
···`,__contextMenu=!${props}.__contextMenu_evilMenu&&require("contextMenu_contextMenu")._patchMenu(${props}, ${items})`······
···`,__contextMenu=!${props}.__contextMenu_evilMenu&&require("contextMenu_contextMenu")._patchMenu(${props}, ${items})`······+dependencies: [{ ext: "spacepack", id: "spacepack" }, "Menu API only allows Items and groups of Items as children."]+dependencies: [{ ext: "spacepack", id: "spacepack" }, "Menu API only allows Items and groups of Items as children."]
+4
-18
packages/core-extensions/src/contextMenu/webpackModules/contextMenu.ts
+4
-18
packages/core-extensions/src/contextMenu/webpackModules/contextMenu.ts
······
···+import { InternalItem, MenuElement, MenuProps } from "@moonlight-mod/types/coreExtensions/contextMenu";+item: (props: any) => React.ReactComponentElement<MenuElement> | React.ReactComponentElement<MenuElement>[];+item: (props: T) => React.ReactComponentElement<MenuElement> | React.ReactComponentElement<MenuElement>[],···
+3
-13
packages/core-extensions/src/contextMenu/webpackModules/evilMenu.ts
+3
-13
packages/core-extensions/src/contextMenu/webpackModules/evilMenu.ts
···
···+const Menu = spacepack.findFunctionByStrings(exp, "Menu API only allows Items and groups of Items as children.")!;
+1
-3
packages/core-extensions/src/devToolsExtensions/host.ts
+1
-3
packages/core-extensions/src/devToolsExtensions/host.ts
+2
-7
packages/core-extensions/src/disableSentry/host.ts
+2
-7
packages/core-extensions/src/disableSentry/host.ts
···
···+const hostSentryPath = require.resolve(join(moonlightHost.asarPath, "node_modules", "@sentry", "electron"));+require.cache[hostSentryPath] = new Module(hostSentryPath, require.cache[require.resolve(moonlightHost.asarPath)]);
+2
-7
packages/core-extensions/src/disableSentry/node.ts
+2
-7
packages/core-extensions/src/disableSentry/node.ts
···
···+const sentryPath = require.resolve(resolve(preloadPath, "..", "node_modules", "@sentry", "electron"));+require.cache[sentryPath] = new Module(sentryPath, require.cache[require.resolve(preloadPath)]);
+1
-2
packages/core-extensions/src/disableSentry/webpackModules/stub.ts
+1
-2
packages/core-extensions/src/disableSentry/webpackModules/stub.ts
+5
-17
packages/core-extensions/src/markdown/index.ts
+5
-17
packages/core-extensions/src/markdown/index.ts
······`__slateRules,${rulesDef}=__slateRules=require("markdown_markdown")._addSlateRules({link:{${rules}}),${syntaxBefore}=new Set``${start}if(${rule}.type.startsWith("__moonlight_")){if(__slateRules[${rule}.type].type=="inlineStyle"){${inlineStyleBody}}else{${plaintextReturn}}}${body}case"emoticon":${plaintextReturn}${otherRules}case"link":{${inlineStyleBody}}default:`···
···+replacement: (_, rules, RULES) => `=require("markdown_markdown")._addRules({newline:${rules}}),${RULES}=(0,`+replacement: (_, rulesets) => `;require("markdown_markdown")._applyRulesetBlacklist(${rulesets});`···`__slateRules,${rulesDef}=__slateRules=require("markdown_markdown")._addSlateRules({link:{${rules}}),${syntaxBefore}=new Set`+match: /(originalMatch:.}=(.);)(.+?)case"emoticon":(return .+?;)(.+?)case"subtext":{(.+?)}default:/,`${start}if(${rule}.type.startsWith("__moonlight_")){if(__slateRules[${rule}.type].type=="inlineStyle"){${inlineStyleBody}}else{${plaintextReturn}}}${body}case"emoticon":${plaintextReturn}${otherRules}case"link":{${inlineStyleBody}}default:`···
+4
-16
packages/core-extensions/src/markdown/webpackModules/markdown.ts
+4
-16
packages/core-extensions/src/markdown/webpackModules/markdown.ts
······
···+import { MarkdownRule, Ruleset, SlateRule } from "@moonlight-mod/types/coreExtensions/markdown";···+export function _applyRulesetBlacklist(rulesets: Record<Ruleset, Record<string, MarkdownRule>>) {
+1
-4
packages/core-extensions/src/moonbase/index.tsx
+1
-4
packages/core-extensions/src/moonbase/index.tsx
+5
-17
packages/core-extensions/src/moonbase/native.ts
+5
-17
packages/core-extensions/src/moonbase/native.ts
·········
·········
+2
-8
packages/core-extensions/src/moonbase/types.ts
+2
-8
packages/core-extensions/src/moonbase/types.ts
···
···
+6
-29
packages/core-extensions/src/moonbase/webpackModules/settings.tsx
+6
-29
packages/core-extensions/src/moonbase/webpackModules/settings.tsx
············
···+const SettingsNotice = spacepack.findByCode("onSaveButtonColor", "FocusRingScope")[0].exports.Z;······+<Text variant="heading-lg/semibold" tag="h2" color={last ? "header-primary" : "header-secondary"}>···+<MenuItem key={page.id} id={`moonbase-${page.id}`} label={page.name} action={() => open("moonbase", i)} />
+16
-55
packages/core-extensions/src/moonbase/webpackModules/stores.ts
+16
-55
packages/core-extensions/src/moonbase/webpackModules/stores.ts
······························
···+import { ExtensionState, MoonbaseExtension, MoonbaseNatives, RepositoryManifest } from "../types";······+state: moonlight.enabledExtensions.has(ext.id) ? ExtensionState.Enabled : ExtensionState.Disabled,······+return Object.values(this.extensions).find((e) => e.id === ext.id && e.source.url === ext.source.url);+const existing = Object.values(this.extensions).find((e) => e.id === ext.id && e.source.url === ext.source.url);+return existing.manifest.version !== ext.manifest.version && existing.state !== ExtensionState.NotDownloaded;······+getExtensionConfigRaw<T>(id: string, key: string, defaultValue: T | undefined): T | undefined {···+if (update != null) this.extensions[uniqueId].compat = checkExtensionCompat(update.updateManifest);······
+8
-34
packages/core-extensions/src/moonbase/webpackModules/ui/config/index.tsx
+8
-34
packages/core-extensions/src/moonbase/webpackModules/ui/config/index.tsx
··················
···············+value={MoonbaseSettingsStore.getExtensionConfigRaw<boolean>("moonbase", "updateChecking", true)}+<FormText className={Margins.marginBottom4}>A list of remote repositories to display extensions from</FormText>···
+28
-84
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/card.tsx
+28
-84
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/card.tsx
························
···+const TabBarClasses = spacepack.findByExports("tabBar", "tabBarItem", "headerContentWrapper")[0].exports;···+const { ext, enabled, busy, update, conflicting } = useStateFromStores([MoonbaseSettingsStore], () => {······+<Tooltip text={COMPAT_TEXT_MAP[ext.compat]} shouldShow={ext.compat !== ExtensionCompat.Compatible}>············
+17
-67
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/filterBar.tsx
+17
-67
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/filterBar.tsx
·····················
···+.lazyLoad('"Missing channel in Channel.openChannelContextMenu"', /e\("(\d+)"\)/g, /webpackId:(\d+?),/)+function toggleTag(selectedTags: Set<string>, setSelectedTags: (tags: Set<string>) => void, tag: string) {······+<Heading color="interactive-normal" variant="text-xs/bold" className={FilterDialogClasses.headerText}>·········+<Text className={FilterBarClasses.sortDropdownText} variant="text-sm/medium" color="interactive-normal">···
+18
-48
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/index.tsx
+18
-48
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/index.tsx
·········
···+const SearchBar: any = Object.values(spacepack.findByCode("Messages.SEARCH", "hideSearchIcon")[0].exports)[0];+savedFilter: MoonbaseSettingsStore.getExtensionConfigRaw<number>("moonbase", "filter", defaultFilter)+setFilter = (filter) => MoonbaseSettingsStore.setExtensionConfig("moonbase", "filter", filter);···+[...selectedTags.values()].every((tag) => ext.manifest.meta?.tags?.includes(tag as ExtensionTag)) &&···+<FilterBar filter={filter} setFilter={setFilter} selectedTags={selectedTags} setSelectedTags={setSelectedTags} />
+4
-27
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/info.tsx
+4
-27
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/info.tsx
·········
···+const UserInfoClasses = spacepack.findByCode("infoScroller", "userInfoSection", "userInfoSectionHeader")[0].exports;······+<Badge key={i} color={tag === ExtensionTag.DangerZone ? "var(--red-400)" : "var(--brand-500)"}>
+7
-19
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/popup.tsx
+7
-19
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/popup.tsx
············
···+const { openModalLazy, closeModal } = spacepack.require("@moonlight-mod/wp/discord/components/common/index");···+candidate.source.url ?? presentableLoadSources[candidate.source.type] ?? candidate.manifest.version ?? ""···+const amountNotAvailable = Object.values(deps).filter((candidates) => candidates.length === 0).length;···+This extension depends on other extensions which are not downloaded. Choose which extensions to download.
+27
-102
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/settings.tsx
+27
-102
packages/core-extensions/src/moonbase/webpackModules/ui/extensions/settings.tsx
····································
··················+options={options.map((o: SelectOption) => (typeof o === "string" ? { value: o, label: o } : o))}···+const { value, displayName, description } = useConfigEntry<string | string[]>(ext.uniqueId, name);+options={options.map((o: SelectOption) => (typeof o === "string" ? { value: o, label: o } : o))}···+function RemoveEntryButton({ onClick, disabled }: { onClick: () => void; disabled: boolean }) {······+const { value, displayName, description } = useConfigEntry<Record<string, string>>(ext.uniqueId, name);+const updateConfig = () => MoonbaseSettingsStore.setExtensionConfig(ext.id, name, Object.fromEntries(entries));······+<Component value={value} setValue={(value) => MoonbaseSettingsStore.setExtensionConfig(ext.id, name, value)} />
+6
-25
packages/core-extensions/src/moonbase/webpackModules/ui/index.tsx
+6
-25
packages/core-extensions/src/moonbase/webpackModules/ui/index.tsx
············
······+const { setSection, clearSubsection } = spacepack.findByExports("setSection", "clearSubsection")[0].exports.Z;···+const subsection = useStateFromStores([UserSettingsModalStore], () => UserSettingsModalStore.getSubsection() ?? 0);···+<TabBar selectedItem={subsection} onItemSelect={setSubsection} type="top-pill" className={TabBarClasses.tabBar}>
+5
-18
packages/core-extensions/src/moonbase/webpackModules/ui/update.tsx
+5
-18
packages/core-extensions/src/moonbase/webpackModules/ui/update.tsx
·········
······+const newVersion = useStateFromStores([MoonbaseSettingsStore], () => MoonbaseSettingsStore.newVersion);···
+5
-23
packages/core-extensions/src/moonbase/webpackModules/updates.tsx
+5
-23
packages/core-extensions/src/moonbase/webpackModules/updates.tsx
·········
···+const UserSettingsSections = spacepack.findObjectFromKey(Constants, "APPEARANCE_THEME_PICKER");······
+9
-42
packages/core-extensions/src/nativeFixes/host.ts
+9
-42
packages/core-extensions/src/nativeFixes/host.ts
············// These will eventually be renamed https://source.chromium.org/chromium/chromium/src/+/5482210941a94d70406b8da962426e4faca7fce4
······+if (moonlightHost.getConfigOption<boolean>("nativeFixes", "disableRendererBackgrounding") ?? true) {······// These will eventually be renamed https://source.chromium.org/chromium/chromium/src/+/5482210941a94d70406b8da962426e4faca7fce4
+2
-6
packages/core-extensions/src/notices/index.ts
+2
-6
packages/core-extensions/src/notices/index.ts
···`case "__moonlight_notice":return${createElement}(require("notices_component").default,{});${orig}`···
···`case "__moonlight_notice":return${createElement}(require("notices_component").default,{});${orig}`···
+1
-4
packages/core-extensions/src/notices/webpackModules/component.tsx
+1
-4
packages/core-extensions/src/notices/webpackModules/component.tsx
+1
-4
packages/core-extensions/src/notices/webpackModules/notices.ts
+1
-4
packages/core-extensions/src/notices/webpackModules/notices.ts
+9
-34
packages/core-extensions/src/quietLoggers/index.ts
+9
-34
packages/core-extensions/src/quietLoggers/index.ts
·········
······+['"[BUILD INFO] Release Channel: "', /new .{1,2}\.Z\(\)\.log\("\[BUILD INFO\] Release Channel: ".+?"\)\),/],+['.APP_NATIVE_CRASH,"Storage"', 'console.log("AppCrashedFatalReport: getLastCrash not supported.");'],+['"NativeDispatchUtils"', /null==.&&.\.warn\("Tried getting Dispatch instance before instantiated"\),/],+['console.warn("Window state not initialized"', /console\.warn\("Window state not initialized",.\),/]···+[/console\.warn\("\[DEPRECATED\] Please use `subscribeWithSelector` middleware"\)/g, "/*$&*/"],
+46
-67
packages/core-extensions/src/rocketship/host/permissions.ts
+46
-67
packages/core-extensions/src/rocketship/host/permissions.ts
···
···+windowSession.setPermissionCheckHandler((webcontents, permission, requestingOrigin, details) => {+windowSession.setPermissionCheckHandler((webcontents, permission, requestingOrigin, details) => {+windowSession.setPermissionCheckHandler = function catchSetPermissionCheckHandler(handler: PermissionCheckHandler) {
+4
-12
packages/core-extensions/src/rocketship/host/types.ts
+4
-12
packages/core-extensions/src/rocketship/host/types.ts
···// https://github.com/Vencord/venmic/blob/d737ef33eaae7a73d03ec02673e008cf0243434d/lib/module.d.ts···
···// https://github.com/Vencord/venmic/blob/d737ef33eaae7a73d03ec02673e008cf0243434d/lib/module.d.ts+type LiteralUnion<LiteralType, BaseType extends string> = LiteralType | (BaseType & Record<never, never>);···
+23
-31
packages/core-extensions/src/rocketship/host/venmic.ts
+23
-31
packages/core-extensions/src/rocketship/host/venmic.ts
·········
···+const venmic = require(path.join(path.dirname(moonlightHost.asarPath), "..", "venmic.node")) as {······
+5
-11
packages/core-extensions/src/rocketship/index.ts
+5
-11
packages/core-extensions/src/rocketship/index.ts
·········
·········
+2
-4
packages/core-extensions/src/settings/index.ts
+2
-4
packages/core-extensions/src/settings/index.ts
······
···+replacement: (_, sections: string) => `require("settings_settings").Settings._mutateSections(${sections})}`···
+3
-11
packages/core-extensions/src/settings/webpackModules/settings.ts
+3
-11
packages/core-extensions/src/settings/webpackModules/settings.ts
·········
···+import { SettingsSection, Settings as SettingsType } from "@moonlight-mod/types/coreExtensions/settings";······
+13
-46
packages/core-extensions/src/spacepack/webpackModules/spacepack.ts
+13
-46
packages/core-extensions/src/spacepack/webpackModules/spacepack.ts
························
·········+(item) => !(item instanceof RegExp ? item.test(mod.toString()) : mod.toString().indexOf(item) !== -1)·········+(query) => !(query instanceof RegExp ? func.toString().match(query) : func.toString().includes(query))···+return Promise.all(chunkIds.map((c) => webpackRequire.e(c))).then(() => webpackRequire(moduleId));···
+2
-7
packages/core/src/config.ts
+2
-7
packages/core/src/config.ts
······
······
+15
-59
packages/core/src/extension.ts
+15
-59
packages/core/src/extension.ts
························
···+import { ExtensionManifest, DetectedExtension, ExtensionLoadSource, constants } from "@moonlight-mod/types";···+async function loadDetectedExtensions(dir: string, type: ExtensionLoadSource): Promise<DetectedExtension[]> {···+const manifest: ExtensionManifest = JSON.parse(await moonlightFS.readFileString(manifestPath));+if (!moonlightFS.exists(webPath) && !moonlightFS.exists(nodePath) && !moonlightFS.exists(hostPath)) {+const web = (await moonlightFS.exists(webPath)) ? await moonlightFS.readFileString(webPath) : undefined;······+res.push(...(await loadDetectedExtensions(getCoreExtensionsPath(), ExtensionLoadSource.Core)));+res.push(...(await loadDetectedExtensions(await getExtensionsPath(), ExtensionLoadSource.Normal)));···+const coreExtensions = Array.from(new Set(Object.keys(coreExtensionsFs).map((x) => x.split("/")[0])));···+wpModules[wpModuleFile.replace(wpModulesPath + "/", "").replace(".js", "")] = coreExtensionsFs[wpModuleFile];···
+8
-25
packages/core/src/extension/loader.ts
+8
-25
packages/core/src/extension/loader.ts
··················
············+export async function loadExtensions(exts: DetectedExtension[]): Promise<ProcessedExtensions> {+exts = exts.filter((ext) => checkExtensionCompat(ext.manifest) === ExtensionCompat.Compatible);···+export async function loadProcessedExtensions({ extensions, dependencyGraph }: ProcessedExtensions) {···
+21
-59
packages/core/src/patch.ts
+21
-59
packages/core/src/patch.ts
····································
······+export function onModuleLoad(module: string | string[], callback: (moduleId: string) => void): void {······+typeof patch.find === "string" ? moduleString.indexOf(patch.find) !== -1 : patch.find.test(moduleString);···+replace.match = new RegExp(replace.match.source.replace(/\\i/g, "[A-Za-z_$][\\w$]*"), replace.match.flags);···+moduleString = newModule.toString().replace(/\n/g, "") + `//# sourceURL=Webpack-Module-${id}`;···+const wrapped = `(${moduleCache[id]}).apply(this, arguments)\n` + `//# sourceURL=Webpack-Module-${id}`;············+for (const [name, func] of Object.entries(moonlight.moonmap.getWebpackModules("window.moonlight.moonmap"))) {···
+2
-12
packages/core/src/persist.ts
+2
-12
packages/core/src/persist.ts
······
······+const newRootDir = join(this.rootPath, "app-" + versions.current_host.map((v: number) => v.toString()).join("."));
+1
-4
packages/core/src/util/binary.ts
+1
-4
packages/core/src/util/binary.ts
+2
-7
packages/core/src/util/data.ts
+2
-7
packages/core/src/util/data.ts
···
···
+4
-12
packages/core/src/util/dependency.ts
+4
-12
packages/core/src/util/dependency.ts
·········
···+const dependsOnMe = Array.from(dependencyGraphOrig.entries()).filter(([, v]) => v?.has(dep.id));······
+7
-27
packages/core/src/util/event.ts
+7
-27
packages/core/src/util/event.ts
············
······+removeEventListener: <Id extends keyof EventData>(id: Id, cb: (data: EventData[Id]) => void) => {······+removeEventListener: <Id extends keyof EventData>(id: Id, cb: (data: EventData[Id]) => void) => {
+1
-3
packages/core/src/util/import.ts
+1
-3
packages/core/src/util/import.ts
+2
-8
packages/core/src/util/logger.ts
+2
-8
packages/core/src/util/logger.ts
······
···+args = [`%c[${logLevel}]`, `background-color: ${colors[level]}; color: #FFFFFF;`, `[${this.name}]`, ...obj];···
+8
-31
packages/injector/src/index.ts
+8
-31
packages/injector/src/index.ts
··················
···+import { loadExtensions, loadProcessedExtensions } from "@moonlight-mod/core/extension/loader";······+const directives = ["style-src", "connect-src", "img-src", "font-src", "media-src", "worker-src", "prefetch-src"];······+require.cache[cmdSwitchesPath] = new Module(cmdSwitchesPath, require.cache[require.resolve(asarPath)]);···+Object.defineProperty(electronClone, property, Object.getOwnPropertyDescriptor(electron, property)!);
+5
-17
packages/node-preload/src/index.ts
+5
-17
packages/node-preload/src/index.ts
············
···+import { loadExtensions, loadProcessedExtensions } from "@moonlight-mod/core/extension/loader";···+const extCors = moonlightNode.processedExtensions.extensions.flatMap((x) => x.manifest.cors ?? []);···+const extBlocked = moonlightNode.processedExtensions.extensions.flatMap((e) => e.manifest.blocked ?? []);···
+1
-3
packages/types/src/config.ts
+1
-3
packages/types/src/config.ts
+1
-2
packages/types/src/constants.ts
+1
-2
packages/types/src/constants.ts
+4
-16
packages/types/src/core/event.ts
+4
-16
packages/types/src/core/event.ts
···
···+export interface MoonlightEventEmitter<EventId extends string = string, EventData = Record<EventId, any>> {+addEventListener: <Id extends keyof EventData>(id: Id, cb: (data: EventData[Id]) => void) => void;+removeEventListener: <Id extends keyof EventData>(id: Id, cb: (data: EventData[Id]) => void) => void;
+2
-10
packages/types/src/coreExtensions/contextMenu.ts
+2
-10
packages/types/src/coreExtensions/contextMenu.ts
······
···+export type MenuElement = MenuSeparator | MenuGroup | MenuItem | MenuCheckboxItem | MenuRadioItem | MenuControlItem;···
+5
-23
packages/types/src/coreExtensions/markdown.ts
+5
-23
packages/types/src/coreExtensions/markdown.ts
······
···+export type Parser = (source: string, state?: State | null | undefined) => Array<SingleASTNode>;+export type ParseFunction = (capture: Capture, nestedParse: Parser, state: State) => UntypedASTNode | ASTNode;···+export type SingleNodeOutput<Result> = (node: SingleASTNode, nestedOutput: Output<Result>, state: State) => Result;
+1
-5
packages/types/src/coreExtensions/moonbase.ts
+1
-5
packages/types/src/coreExtensions/moonbase.ts
+3
-15
packages/types/src/coreExtensions/spacepack.ts
+3
-15
packages/types/src/coreExtensions/spacepack.ts
······
······+findObjectFromKeyValuePair: (exports: Record<string, any>, key: string, value: any) => any | null;+lazyLoad: (find: string | RegExp | (string | RegExp)[], chunk: RegExp, module: RegExp) => Promise<any>;
+2
-10
packages/types/src/discord/webpack.ts
+2
-10
packages/types/src/discord/webpack.ts
···
···+export type WebpackModuleFunc = ((module: any, exports: any, require: WebpackRequireType) => void) & {+export type WebpackJsonpEntry = [number[], { [id: string]: WebpackModuleFunc }, (require: WebpackRequireType) => any];
+1
-2
packages/types/src/extension.ts
+1
-2
packages/types/src/extension.ts
+3
-15
packages/types/src/globals.ts
+3
-15
packages/types/src/globals.ts
······
···+import type { DetectedExtension, IdentifiedPatch, IdentifiedWebpackModule, ProcessedExtensions } from "./extension";···
+1
-6
packages/types/src/index.ts
+1
-6
packages/types/src/index.ts
+1
-6
packages/web-preload/src/index.ts
+1
-6
packages/web-preload/src/index.ts
···
···+import { installWebpackPatcher, onModuleLoad, registerPatch, registerWebpackModule } from "@moonlight-mod/core/patch";