diff --git a/src/mono/wasm/Wasm.Build.Tests/ModuleConfigTests.cs b/src/mono/wasm/Wasm.Build.Tests/ModuleConfigTests.cs index 8fd34df6ecdda0..717920233be1de 100644 --- a/src/mono/wasm/Wasm.Build.Tests/ModuleConfigTests.cs +++ b/src/mono/wasm/Wasm.Build.Tests/ModuleConfigTests.cs @@ -57,7 +57,7 @@ public async Task DownloadProgressFinishes(bool failAssemblyDownload) ); } - [ConditionalFact(typeof(BuildTestBase), nameof(IsMonoRuntime)), TestCategory("bundler-friendly")] + [Fact, TestCategory("bundler-friendly")] public async Task OutErrOverrideWorks() { Configuration config = Configuration.Debug; diff --git a/src/native/libs/Common/JavaScript/loader/run.ts b/src/native/libs/Common/JavaScript/loader/run.ts index cd8b4b26f7fa69..25347cedbc061e 100644 --- a/src/native/libs/Common/JavaScript/loader/run.ts +++ b/src/native/libs/Common/JavaScript/loader/run.ts @@ -35,6 +35,23 @@ export async function createRuntime(downloadOnly: boolean): Promise { const modulesAfterConfigLoadedPromises: [JsAsset, Promise][] = normalizeCollection(resources.modulesAfterConfigLoaded).map((a) => [a, callLibraryInitializerOnRuntimeConfigLoaded(a)]); await Promise.all(modulesAfterConfigLoadedPromises.map(([, p]) => p)); + // Wire user-provided out/err overrides to Emscripten's print/printErr. + // This must happen before the native module loads so Emscripten picks them up. + if (!Module.out) { + // eslint-disable-next-line no-console + Module.out = console.log.bind(console); + } + if (!Module.err) { + // eslint-disable-next-line no-console + Module.err = console.error.bind(console); + } + if (!Module.print) { + Module.print = Module.out; + } + if (!Module.printErr) { + Module.printErr = Module.err; + } + // after onConfigLoaded hooks that could install polyfills, our polyfills can be initialized await initPolyfills(); diff --git a/src/native/libs/Common/JavaScript/types/internal.ts b/src/native/libs/Common/JavaScript/types/internal.ts index e7fb15663219cf..aaac89fc35e2f4 100644 --- a/src/native/libs/Common/JavaScript/types/internal.ts +++ b/src/native/libs/Common/JavaScript/types/internal.ts @@ -46,6 +46,8 @@ export type EmscriptenInternals = { export type EmscriptenModuleInternal = EmscriptenModule & DotnetModuleConfig & { runtimeKeepalivePush(): void; runtimeKeepalivePop(): void; + print(message: string): void; + printErr(message: string): void; instantiateWasm?: InstantiateWasmCallBack; onAbort?: (reason: any, extraJson?: string) => void; onExit?: (code: number) => void;