[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

[browser] Separate hybrid globalization JS code to es6 module - #101543

Merged
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization
May 17, 2024
Merged

[browser] Separate hybrid globalization JS code to es6 module#101543
ilonatommy merged 33 commits into
dotnet:mainfrom
ilonatommy:98483-hg-modularization

Conversation

@ilonatommy

@ilonatommyilonatommy commented Apr 25, 2024

Copy link
Copy Markdown
Member

Contributes to #98483.

  • separate hybrid globalization JS code into a separate module
  • add the module if HybridGlobalization=true

dotnet.runtime.js without this PR: 202k
dotnet.runtime.js with this PR: 191k

@ilonatommyilonatommy added arch-wasm WebAssembly architecture area-System.Globalization os-browser Browser variant of arch-wasm labels Apr 25, 2024
@ilonatommyilonatommy self-assigned this Apr 25, 2024
@ilonatommy
ilonatommy marked this pull request as draft April 25, 2024 13:20
@maraf

maraf commented Apr 25, 2024

Copy link
Copy Markdown
Member

When solved, is there a good way to read MsBuild's value and attach/remove module in the runtime? The ideal solution should avoid creating a new runtime flavor.

Sure. We will update GenerateWasmBootJson (and WasmAppBuilder for the time being) to either include the module or not, and update the loading in TS

Comment threadsrc/mono/browser/runtime/hybrid-globalization/module-exports.ts Outdated
@ilonatommy
ilonatommy marked this pull request as ready for review May 14, 2024 14:51
@ilonatommy

ilonatommy commented May 14, 2024

Copy link
Copy Markdown
MemberAuthor

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

@pavelsavara

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

I think that the blazor PR would not fix it because it's just type definition. The error is complaining about missing files. Likely flow of blazor with this change will fix it.

cc @maraf

@maraf

Copy link
Copy Markdown
Member

Blazor-connected failures in WBT require changes to https://github.com/ilonatommy/aspnetcore/blob/3e168fe85e2330621ed12d9c9524c80e0f743dc6/src/Components/dotnet-runtime-js/dotnet.d.ts#L176 (adding jsModuleGlobalization).

Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(config: "Debug", invariant: False) [FAIL]
Could not find dotnet.globalization.js in bundle directory: C:\helix\work\workitem\e\wbt artifacts\blz_hybrid_Debug_4lfnum1h_dzk\bin\Debug\net9.0\wwwroot\_framework. Actual files on disk: dotnet.js, dotnet.js.map, dotnet.native.js, dotnet.native.wasm, dotnet.runtime.js, dotnet.runtime.js.map
Stack Trace:
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(176,0): at Wasm.Build.Tests.ProjectProviderBase.AssertDotNetFilesSet(IReadOnlySet`1 expected, IReadOnlyDictionary`2 superSet, IReadOnlyDictionary`2 actualReadOnly, Boolean expectFingerprintOnDotnetJs, String bundleDir)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(158,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(String binFrameworkDir, Boolean expectFingerprintOnDotnetJs, IReadOnlyDictionary`2 superSet, IReadOnlySet`1 expected)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(78,0): at Wasm.Build.Tests.ProjectProviderBase.FindAndAssertDotnetFiles(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/ProjectProviderBase.cs(44,0): at Wasm.Build.Tests.ProjectProviderBase.AssertBasicBundle(AssertBundleOptionsBase assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/WasmSdkBasedProjectProvider.cs(83,0): at Wasm.Build.Tests.WasmSdkBasedProjectProvider.AssertBundle(AssertWasmSdkBundleOptions assertOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmProjectProvider.cs(17,0): at Wasm.Build.Tests.BlazorWasmProjectProvider.AssertBundle(BlazorBuildOptions options)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(128,0): at Wasm.Build.Tests.BlazorWasmTestBase.AssertBundle(String buildOutput, BlazorBuildOptions blazorBuildOptions)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/BlazorWasmTestBase.cs(67,0): at Wasm.Build.Tests.BlazorWasmTestBase.BlazorBuild(BlazorBuildOptions options, String[] extraArgs)
/_/src/mono/wasm/Wasm.Build.Tests/Blazor/IcuTests.cs(38,0): at Wasm.Build.Tests.Blazor.IcuTests.HybridWithInvariant(String config, Nullable`1 invariant)
--- End of stack trace from previous location ---

Blocked by flow of dotnet/aspnetcore#55716 to runtime.

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

This is just build setup error, isn't it? The globalization.js file is not copied to the output folder. Either the SDK doesn't correctly work or the WBT check isn't cotrect. There shouldn't be anything needed on blazor side to make it work.

The dotnet.d.ts in aspnetcore repo is only important for their build of their typescript that interact with runtime API.

WBT works correctly (non-Blazor IcuTests pass). You're right, it fails because WBT expects the globalization module to be in the bundle when HybridGlobalization == true. Not sure if we can rely on the changes to flow and the problem to "fix itself" as Pavel mentioned.
However, even if the file was copied, we have no entry in blazor.boot.json about jsModuleGlobalization (added by this PR) that is needed to initialize the module loading. Again, no idea how to check if this will get fixed automatically.

@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

Comment threadsrc/mono/browser/runtime/es6/dotnet.es6.lib.js
Comment threadsrc/mono/browser/runtime/hybrid-globalization/locales-common.ts Outdated
Comment threadsrc/mono/browser/runtime/types/internal.ts
@ilonatommy

Copy link
Copy Markdown
MemberAuthor

/azp run runtime-wasm

@azure-pipelines

Copy link
Copy Markdown
Azure Pipelines successfully started running 1 pipeline(s).

@ilonatommy

ilonatommy commented May 17, 2024

Copy link
Copy Markdown
MemberAuthor

Firefox failures are #101617 (locally passes, it's only a CI problem), HybridGlobalization_AOT failures are: #102373 - fails on main as well.

@ilonatommy
ilonatommy merged commit 43b7b53 into dotnet:mainMay 17, 2024
Ruihan-Yin pushed a commit to Ruihan-Yin/runtime that referenced this pull request May 30, 2024
…#101543)
* dotnet.hybrid.js module creation when MT is off
* Importing module
* Remove globalization code from main module, create the globalization module for ST runtime.
* Fix: `runtimeHelper` is not null if we cache it on module init.
* Export functions used by hybrid globalization only when HG is on.
* Do not try to call when methods are not initialized.
* `mono_wasm_get_locale_info` is used also in non-HG mode, add it to the main module.
* Check WBT for presence of globalization module if HG is switched on.
* Fix MT globalization tests - NativeName is fixed there.
* Globalization module is not expected to change on relink.
* Fix blazor's assets.
@github-actionsgithub-actionsBot locked and limited conversation to collaborators Jun 17, 2024
Sign up for freeto subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

arch-wasmWebAssembly architecturearea-System.Globalizationos-browserBrowser variant of arch-wasm

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@ilonatommy@maraf@pavelsavara