build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher
, '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

build(web-ui): fix rollup failing - #4687

Merged
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master
Feb 8, 2026
Merged

build(web-ui): fix rollup failing#4687
ReenigneArcher merged 1 commit into
LizardByte:masterfrom
rbqvq:master

Conversation

@rbqvq

@rbqvqrbqvq commented Feb 8, 2026

Copy link
Copy Markdown
Contributor

Description

Use actions/setup-node instead of MSYS2.

Revert commit fix(build): using @rollup/wasm-node partial changes in #3905

Type of Change

  • feat: New feature (non-breaking change which adds functionality)
  • fix: Bug fix (non-breaking change which fixes an issue)
  • docs: Documentation only changes
  • style: Changes that do not affect the meaning of the code (white-space, formatting, missing semicolons, etc.)
  • refactor: Code change that neither fixes a bug nor adds a feature
  • perf: Code change that improves performance
  • test: Adding missing tests or correcting existing tests
  • build: Changes that affect the build system or external dependencies
  • ci: Changes to CI configuration files and scripts
  • chore: Other changes that don't modify src or test files
  • revert: Reverts a previous commit
  • BREAKING CHANGE: Introduces a breaking change (can be combined with any type above)

Checklist

  • Code follows the style guidelines of this project
  • Code has been self-reviewed
  • Code has been commented, particularly in hard-to-understand areas
  • Code docstring/documentation-blocks for new or existing methods/components have been added or updated
  • Unit tests have been added or updated for any new or modified functionality

AI Usage

  • None: No AI tools were used in creating this PR
  • Light: AI provided minor assistance (formatting, simple suggestions)
  • Moderate: AI helped with code generation or debugging specific parts
  • Heavy: AI generated most or all of the code changes

@rbqvqrbqvq mentioned this pull request Feb 8, 2026
10 tasks

@ReenigneArcherReenigneArcher left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Thank you for the fast resolution on this!

Comment thread.github/workflows/ci-windows.yml Outdated
Comment thread.github/workflows/ci-windows.yml
Comment thread.github/workflows/ci-windows.yml Outdated
Use actions/setup-node instead of MSYS2.
Revert commit `fix(build): using @rollup/wasm-node` partial changes in #3905
Signed-off-by: Coia Prant <coiaprant@gmail.com>
@sonarqubecloud

Copy link
Copy Markdown

@rbqvq

rbqvq commented Feb 8, 2026

Copy link
Copy Markdown
ContributorAuthor

It looks like fine.

I've manually mounted the NodeJS PATH.

I think we don't need a PATH for npm prefix.


CI PASSED at https://github.com/rbqvq/Sunshine/actions/runs/21802858672/job/62901261780


I'm going to sleep now.
I think everything's fine.
Please feel free to make any further changes.

@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Bundle Report

Bundle size has no change ✅

@ReenigneArcherReenigneArcher changed the title fix(build): fix rollup failingbuild(web-ui): fix rollup failingFeb 8, 2026
@ReenigneArcherReenigneArcher added this to the windows-arm milestone Feb 8, 2026
@codecov

codecovBot commented Feb 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 15.17%. Comparing base (5bd3a2b) to head (4c638fe).
⚠️ Report is 205 commits behind head on master.

Additional details and impacted files
@@ Coverage Diff @@## master #4687 +/- ##
==========================================
+ Coverage 15.14% 15.17% +0.03% 
==========================================
Files 95 95 Lines 19883 19883 Branches 9196 9196 ==========================================
+ Hits 3011 3018 +7 - Misses 15684 15727 +43 + Partials 1188 1138 -50 
FlagCoverage Δ
Archlinux11.19% <ø> (ø)
FreeBSD-14.3-aarch64?
FreeBSD-14.3-amd6413.23% <ø> (ø)
Homebrew-ubuntu-22.0413.54% <ø> (+0.11%)⬆️
Linux-AppImage11.60% <ø> (ø)
Windows-AMD6413.48% <ø> (ø)

Flags with carried forward coverage won't be shown. Click here to find out more.
see 16 files with indirect coverage changes

@ReenigneArcher
ReenigneArcher merged commit 8aed1a8 into LizardByte:masterFeb 8, 2026
77 of 83 checks passed
@Yundi339

Copy link
Copy Markdown
Contributor

Hello, we have encountered the same problem as you, but we are also very lucky that this problem has not been triggered until today.
I don't understand the reason for this rollover, it seems to be introduced because of the version update?
I created PR to slove this problem by COPILOT AI.

AlkaidLab/foundation-sunshine#503

The following is the translation.

When Rollup's module pipeline processes an entry file, it invokes the load hooks sequentially according to the plugin order. The first plugin to return a non-null value dictates the result.

Older versions of Rollup (worked previously):

  • The load hook of Vite's internal vite:build-html plugin was ordered before your plugin.
  • It intercepted the HTML entry first, extracting the <script> tags and converting them into JS module code.
  • Your plugin's load hook was never even called (preempted by Vite's internal plugin).

Newer versions of Rollup (currently throwing errors):

  • The execution order or scheduling logic for plugin load hooks has changed.
  • Your plugin's load hook is now invoked before Vite's internal HTML plugin.
  • It returned raw HTML → Rollup tried to parse it as JS → parseAsync threw an error.

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.


Theoretically, you could add enforce: 'post' to your load hook to order it after Vite's internal plugins. This way, vite:build-html would grab the HTML first, and your load wouldn't be invoked.

But this is not a good fix:

  • Relying on plugin execution order is fragile; it might break again in the next Rollup/Vite update.
  • Rollup will always parse whatever the load hook returns as a JS module, so returning HTML is fundamentally wrong.
  • transformIndexHtml is the official API in Vite for processing HTML, and it fully covers this functionality.

Deleting the load hook is the correct solution—it doesn't rely on order, carries no risk of being accidentally invoked, and has zero negative impact on functionality.

@ReenigneArcher

Copy link
Copy Markdown
Member

This PR only addressed an issue when compiling for debian on arm64. Due to adding "@rollup/wasm-node": "4.57.1" in #3905

It wasn't detected before merge, because we don't compile arm64 docker builds in CI/CD for PRs.

@Yundi339

Copy link
Copy Markdown
Contributor

Alright Ok.
That's very strange. My question is a low probability trigger. And I just need to click to rebuild, and it works smoothly.

As described by the last comment:

So it's not that "the new version started using it," but rather that the new version changed the invocation order of the load hooks, causing previously bypassed code to suddenly execute. It should never have returned HTML to Rollup in the first place; it was just pure luck that it wasn't being called before.

If you encounter similar problems in future upgrades, you could consider to deal with it like what I did. I hope you will don't encounter it, it's too metaphysical.

@rbqvq

Copy link
Copy Markdown
ContributorAuthor

Thank you for sharing, the problem here is stable trigger, last year's version did not have this problem, the problem has been solved.

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants

@rbqvq@Yundi339@ReenigneArcher