Merge pull request #203 from moonlight-mod/notnite/node-events
Cynthia Foxwell 1 month ago 7 files (+40, -16)
MODIFIED
packages/browser/src/index.ts
MODIFIED
packages/browser/src/index.ts
@@ -8,6 +8,8 @@ import { getConfig, getConfigOption, getManifest, setConfigOption } from "@moonlight-mod/core/util/config";import { IndexedDB } from "@zenfs/dom";import { configureSingle } from "@zenfs/core";import * as fs from "@zenfs/core/promises";+import { NodeEventPayloads, NodeEventType } from "@moonlight-mod/types/core/event";+import { createEventEmitter } from "@moonlight-mod/core/util/event";function getParts(path: string) {if (path.startsWith("/")) path = path.substring(1);@@ -110,6 +112,7 @@ extensions,processedExtensions,nativesCache: {},isBrowser: true,+ events: createEventEmitter<NodeEventType, NodeEventPayloads>(),version: MOONLIGHT_VERSION,branch: MOONLIGHT_BRANCH as MoonlightBranch,@@ -141,6 +144,7 @@async writeConfig(newConfig) {await writeConfig(newConfig);config = newConfig;+ this.events.dispatchEvent(NodeEventType.ConfigSaved, newConfig);}};
@@ -13,7 +13,7 @@ import { registerPatch, registerWebpackModule } from "../patch";import calculateDependencies from "../util/dependency";import { createEventEmitter } from "../util/event";import { registerStyles } from "../styles";-import { EventPayloads, EventType } from "@moonlight-mod/types/core/event";+import { WebEventPayloads, WebEventType } from "@moonlight-mod/types/core/event";const logger = new Logger("core/extension/loader");@@ -202,7 +202,7 @@ };}export async function loadProcessedExtensions({ extensions, dependencyGraph }: ProcessedExtensions) {- const eventEmitter = createEventEmitter<EventType, EventPayloads>();+ const eventEmitter = createEventEmitter<WebEventType, WebEventPayloads>();const finished: Set<string> = new Set();logger.trace(@@ -224,11 +224,11 @@ }}function done() {- eventEmitter.removeEventListener(EventType.ExtensionLoad, cb);+ eventEmitter.removeEventListener(WebEventType.ExtensionLoad, cb);r();}- eventEmitter.addEventListener(EventType.ExtensionLoad, cb);+ eventEmitter.addEventListener(WebEventType.ExtensionLoad, cb);if (finished.has(dep)) done();}));@@ -242,7 +242,7 @@ logger.debug(`Loading "${ext.id}"`);await loadExt(ext);finished.add(ext.id);- eventEmitter.dispatchEvent(EventType.ExtensionLoad, ext.id);+ eventEmitter.dispatchEvent(WebEventType.ExtensionLoad, ext.id);logger.debug(`Loaded "${ext.id}"`);}
MODIFIED
packages/core/src/patch.ts
MODIFIED
packages/core/src/patch.ts
@@ -11,7 +11,7 @@ WebpackRequireType} from "@moonlight-mod/types";import Logger from "./util/logger";import calculateDependencies, { Dependency } from "./util/dependency";-import { EventType } from "@moonlight-mod/types/core/event";+import { WebEventType } from "@moonlight-mod/types/core/event";import { processFind, processReplace, testFind } from "./util/patch";const logger = new Logger("core/patch");@@ -402,7 +402,7 @@ realWebpackJsonp = jsonp;const realPush = jsonp.push;if (jsonp.push.__moonlight !== true) {jsonp.push = (items) => {- moonlight.events.dispatchEvent(EventType.ChunkLoad, {+ moonlight.events.dispatchEvent(WebEventType.ChunkLoad, {chunkId: items[0],modules: items[1],require: items[2]@@ -450,7 +450,7 @@ configurable: true,set(modules: any) {const { stack } = new Error();if (stack!.includes("/assets/") && !Array.isArray(modules)) {- moonlight.events.dispatchEvent(EventType.ChunkLoad, {+ moonlight.events.dispatchEvent(WebEventType.ChunkLoad, {modules: modules});patchModules(modules);
MODIFIED
packages/node-preload/src/index.ts
MODIFIED
packages/node-preload/src/index.ts
@@ -11,6 +11,8 @@ import { loadExtensions, loadProcessedExtensions } from "@moonlight-mod/core/extension/loader";import createFS from "@moonlight-mod/core/fs";import { registerCors, registerBlocked, getDynamicCors } from "@moonlight-mod/core/cors";import { getConfig, getConfigOption, getManifest, setConfigOption } from "@moonlight-mod/core/util/config";+import { NodeEventPayloads, NodeEventType } from "@moonlight-mod/types/core/event";+import { createEventEmitter } from "@moonlight-mod/core/util/event";let initialized = false;let logger: Logger;@@ -51,6 +53,7 @@ extensions,processedExtensions,nativesCache: {},isBrowser: false,+ events: createEventEmitter<NodeEventType, NodeEventPayloads>(),version: MOONLIGHT_VERSION,branch: MOONLIGHT_BRANCH as MoonlightBranch,@@ -69,6 +72,7 @@ },async writeConfig(newConfig) {await writeConfig(newConfig);config = newConfig;+ this.events.dispatchEvent(NodeEventType.ConfigSaved, newConfig);},getNatives: (ext: string) => global.moonlightNode.nativesCache[ext],
MODIFIED
packages/types/src/core/event.ts
MODIFIED
packages/types/src/core/event.ts
@@ -1,3 +1,4 @@+import { Config } from "../config";import { WebpackModuleFunc, WebpackRequireType } from "../discord";export interface MoonlightEventEmitter<EventId extends string = string, EventData = Record<EventId, any>> {@@ -6,16 +7,24 @@ 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;}-export enum EventType {+export enum WebEventType {ChunkLoad = "chunkLoad",ExtensionLoad = "extensionLoad"}-export type EventPayloads = {- [EventType.ChunkLoad]: {+export type WebEventPayloads = {+ [WebEventType.ChunkLoad]: {chunkId?: number[];modules: { [id: string]: WebpackModuleFunc };require?: (require: WebpackRequireType) => any;};- [EventType.ExtensionLoad]: string;+ [WebEventType.ExtensionLoad]: string;+};++export enum NodeEventType {+ ConfigSaved = "configSaved"+}++export type NodeEventPayloads = {+ [NodeEventType.ConfigSaved]: Config;};
MODIFIED
packages/types/src/globals.ts
MODIFIED
packages/types/src/globals.ts
@@ -4,7 +4,13 @@ import type { DetectedExtension, IdentifiedPatch, IdentifiedWebpackModule, ProcessedExtensions } from "./extension";import type EventEmitter from "events";import type LunAST from "@moonlight-mod/lunast";import type Moonmap from "@moonlight-mod/moonmap";-import type { EventPayloads, EventType, MoonlightEventEmitter } from "./core/event";+import type {+ WebEventPayloads,+ WebEventType,+ MoonlightEventEmitter,+ NodeEventType,+ NodeEventPayloads+} from "./core/event";import { MoonlightFS } from "./fs";export type MoonlightHost = {@@ -34,6 +40,7 @@ extensions: DetectedExtension[];processedExtensions: ProcessedExtensions;nativesCache: Record<string, any>;isBrowser: boolean;+ events: MoonlightEventEmitter<NodeEventType, NodeEventPayloads>;version: string;branch: MoonlightBranch;@@ -60,7 +67,7 @@ patched: Map<string, Set<string>>;unpatched: Set<IdentifiedPatch>;pendingModules: Set<IdentifiedWebpackModule>;enabledExtensions: Set<string>;- events: MoonlightEventEmitter<EventType, EventPayloads>;+ events: MoonlightEventEmitter<WebEventType, WebEventPayloads>;patchingInternals: {onModuleLoad: (moduleId: string | string[], callback: (moduleId: string) => void) => void;registerPatch: (patch: IdentifiedPatch) => void;
MODIFIED
packages/web-preload/src/index.ts
MODIFIED
packages/web-preload/src/index.ts
@@ -7,7 +7,7 @@ import LunAST from "@moonlight-mod/lunast";import Moonmap from "@moonlight-mod/moonmap";import loadMappings from "@moonlight-mod/mappings";import { createEventEmitter } from "@moonlight-mod/core/util/event";-import { EventPayloads, EventType } from "@moonlight-mod/types/core/event";+import { WebEventPayloads, WebEventType } from "@moonlight-mod/types/core/event";async function load() {delete window._moonlightWebLoad;@@ -20,7 +20,7 @@ unpatched: new Set(),pendingModules: new Set(),enabledExtensions: new Set(),- events: createEventEmitter<EventType, EventPayloads>(),+ events: createEventEmitter<WebEventType, WebEventPayloads>(),patchingInternals: {onModuleLoad,registerPatch,