[browser] fix order of libraryInitializers execution (#90189)
authorPavel Savara <pavel.savara@gmail.com>
Wed, 9 Aug 2023 01:07:41 +0000 (03:07 +0200)
committerGitHub <noreply@github.com>
Wed, 9 Aug 2023 01:07:41 +0000 (21:07 -0400)
src/mono/sample/wasm/browser-advanced/main.js
src/mono/wasm/runtime/loader/config.ts

index 7b58f77..f95fcbf 100644 (file)
@@ -30,6 +30,13 @@ try {
         // 'withModuleConfig' is internal lower level API 
         // here we show how emscripten could be further configured
         // It is preferred to use specific 'with***' methods instead in all other cases.
+        .withConfig({
+            resources: {
+                modulesAfterConfigLoaded: {
+                    "advanced-sample.lib.module.js": ""
+                }
+            }
+        })
         .withModuleConfig({
             configSrc: "./blazor.boot.json",
             onConfigLoaded: (config) => {
@@ -38,9 +45,6 @@ try {
                 // config is loaded and could be tweaked before the rest of the runtime startup sequence
                 config.environmentVariables["MONO_LOG_LEVEL"] = "debug";
                 config.browserProfilerOptions = {};
-                config.resources.modulesAfterConfigLoaded = {
-                    "advanced-sample.lib.module.js": ""
-                }
             },
             preInit: () => { console.log('user code Module.preInit'); },
             preRun: () => { console.log('user code Module.preRun'); },
index 053d769..dc7ba1e 100644 (file)
@@ -228,6 +228,10 @@ export async function mono_wasm_load_config(module: DotnetModuleInternal): Promi
 
         normalizeConfig();
 
+        // scripts need to be loaded before onConfigLoaded because Blazor calls `beforeStart` export in onConfigLoaded
+        await importLibraryInitializers(loaderHelpers.config.resources?.modulesAfterConfigLoaded);
+        await invokeLibraryInitializers("onRuntimeConfigLoaded", [loaderHelpers.config]);
+
         if (module.onConfigLoaded) {
             try {
                 await module.onConfigLoaded(loaderHelpers.config, exportedRuntimeAPI);
@@ -239,8 +243,6 @@ export async function mono_wasm_load_config(module: DotnetModuleInternal): Promi
             }
         }
 
-        await importLibraryInitializers(loaderHelpers.config.resources?.modulesAfterConfigLoaded);
-        await invokeLibraryInitializers("onRuntimeConfigLoaded", [loaderHelpers.config]);
         normalizeConfig();
 
         loaderHelpers.afterConfigLoaded.promise_control.resolve(loaderHelpers.config);