Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

@pranaygp
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
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;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} 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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

@pranaygp
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } 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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

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

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis - #2465

Merged
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable
Jun 17, 2026
Merged

Backport #2398: fix(swc-plugin): count destructuring-default references in DCE usage analysis#2465
pranaygp merged 1 commit into
stablefrom
backport/pr-2398-to-stable

Conversation

@github-actions

Copy link
Copy Markdown
Contributor

Automated backport of #2398 to stable (backport job run).

AI recommendation: This is a self-contained bug fix to the SWC plugin's DCE usage collector, and the buggy ComprehensiveUsageCollector::visit_mut_var_declarator code (with its "Only visit the initializer" comment) is present verbatim on stable, so the runtime ReferenceError it fixes affects stable too. It touches only actively-maintained paths (transform/src/lib.rs, spec.md, test fixtures, plus a changeset) and does not build on any main-only APIs.

Merge conflicts were resolved by AI (opencode with anthropic/claude-opus-4.8). Please review the conflict resolution carefully before merging.

…analysis (#2398)
The DCE usage collector skipped the entire variable name pattern when
visiting a `VarDeclarator` (to avoid marking the binding name as "used").
But default-value initializers inside destructuring patterns live in that
pattern — e.g. the `TTL` in `const { ttl = TTL } = options;` — so those
references were invisible to the collector. A module-scope `const`
referenced only through such a default was treated as unused and stripped,
while the surviving code kept reading it, producing a runtime
`ReferenceError` when the default fired.
Traverse the default-value initializer expressions (and computed keys)
within destructuring patterns while still not marking the binding names
themselves, so the referenced declaration is preserved. Function-parameter
defaults were already covered (params are visited in full).
Fixes#2396.
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Pranay Prakash <pranay.gp@gmail.com>
@changeset-bot

Copy link
Copy Markdown

🦋 Changeset detected

Latest commit: 452d1ee

The changes in this PR will be included in the next version bump.

This PR includes changesets to release 17 packages
NameType
@workflow/swc-pluginPatch
@workflow/astroPatch
@workflow/buildersPatch
@workflow/cliPatch
@workflow/nestPatch
@workflow/nextPatch
@workflow/nitroPatch
@workflow/rollupPatch
@workflow/sveltekitPatch
workflowPatch
@workflow/vitePatch
@workflow/vitestPatch
@workflow/world-testingPatch
@workflow/nuxtPatch
@workflow/corePatch
@workflow/web-sharedPatch
@workflow/webPatch

Not sure what this means? Click here to learn what changesets are.

Click here if you're a maintainer who wants to add another changeset to this PR

@vercel

vercelBot commented Jun 16, 2026

Copy link
Copy Markdown
Contributor

@pranaygp
pranaygp merged commit b357137 into stableJun 17, 2026
21 checks passed
@pranaygp
pranaygp deleted the backport/pr-2398-to-stable branch June 17, 2026 01:54
TooTallNate added a commit that referenced this pull request Jun 17, 2026
…default DCE test
The #2398 backport (#2465) added the destructuring-default-references-module-const
fixture but committed output-step.js verbatim from main and omitted output-client.js
entirely. Stable's SWC plugin emits a different step-registration shape
(registerStepFunction import vs. inline IIFE) and has less aggressive DCE (the
truly-unused UNUSED const is not stripped), so the copied output-step.js did not
match stable's actual output and the required output-client.js was missing.
Regenerate both fixture outputs against stable's plugin so the client_mode and
step_mode fixture tests pass. The regression being tested still holds: TTL and
RETRIES (referenced only via destructuring defaults) are preserved in all modes.
Signed-off-by: Nathan Rajlich <n@n8.io>
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.

1 participant

@pranaygp