-
Notifications
You must be signed in to change notification settings - Fork 662
Handle await closures and delay running renders in pending scopes #2982
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
🦋 Changeset detectedLatest commit: 6aeb624 The changes in this PR will be included in the next version bump. This PR includes changesets to release 1 package
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 |
WalkthroughAdds a changeset for Pre-merge checks and finishing touches❌ Failed checks (1 warning, 1 inconclusive)
✅ Passed checks (1 passed)
✨ Finishing touches
🧪 Generate unit tests (beta)
Comment |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/runtime-tags/src/common/accessor.ts (1)
17-43: Enum value collision between PendingRenders and TagVariable
AccessorProp.PendingRendersandAccessorProp.TagVariableboth use"T"as the backing string. If these props are used as keys on the same data structure (e.g., branch scopes), they will collide and overwrite each other, breaking tracking for at least one of them.Assign
PendingRendersa unique value that does not conflict with existing members, for example:export enum AccessorProp { @@ - PendingEffects = "J", - PendingRenders = "T", + PendingEffects = "J", + PendingRenders = "W", PlaceholderBranch = "P",Adjust any debug or tooling enums to mirror whatever value you choose.
🧹 Nitpick comments (8)
packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko (1)
1-7: Consider removing debugger from the click handlerThe
onClickhandler currently includesdebugger;, which is probably a leftover from manual debugging and can interrupt automated runs when dev tools are attached. You can simplify it to just incrementvalue:-button onClick() { debugger; value++ } -- ${value} +button onClick() { value++ } -- ${value}packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
3-3: Verify the need for consecutive identical wait calls.The steps array includes two consecutive
wait(2)calls. If both are intentional for testing specific timing or state transitions, consider adding a comment to clarify the purpose.packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko (1)
5-9: Verify the conditional logic intent.The
valuevariable is initialized to1(line 5), but the conditional at line 8 checksif=(value > 0). Sincevaluestarts at1, this condition will always be true. If this is testing specific closure behavior with await, consider adding a comment to clarify the intent.packages/runtime-tags/src/__tests__/main.test.ts (3)
478-528: Log comparison logic is complex but functional.The normalization approach (
normalizeLog) and the sequential matching algorithm work correctly for comparing resume vs CSR logs. However, the variable nameprevResumLoghas a typo (missing 'e' in "Resume").- let prevResumLog = ""; + let prevResumeLog = ""; while (resumeIndex < resumeLogs.length) { const resumeLog = resumeLogs[resumeIndex++].replace( /(# Render)[^\n]+/, "$1", ); - if (resumeLog !== prevResumLog) { + if (resumeLog !== prevResumeLog) { // ... } - prevResumLog = resumeLog; + prevResumeLog = resumeLog; }
530-554: Commented-out code should be removed if no longer needed.This block appears to be legacy logic that's been replaced by the new normalization approach above. If it's not expected to be reactivated, consider removing it to reduce maintenance burden.
376-409: Consider extractingrunStepsto avoid closure complexity.The
runStepsfunction is defined inside the async IIFE and captureshasFlush,flushNext,tracker,input, andstepsfrom the outer scope. While functional, this nested async function pattern can be harder to test and debug independently.packages/runtime-tags/src/dom/control-flow.ts (2)
158-160: Remove or finalize commented-out code.Lines 158-160 contain commented-out code that appears to be work-in-progress. If this is intentional pending effects tracking, consider adding a TODO comment explaining the intent. Otherwise, remove it to avoid confusion.
197-215: Duplicate effect filtering is O(n*m) - consider efficiency.The logic iterates through
pendingEffectsto build a map (Lines 200-207), then filterseffectsagainst it (Lines 208-214). For large effect lists, this could be slow. Consider using a singleSetwith composite keys if performance becomes an issue.That said, for typical use cases this is likely fine. Flagging as optional.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (140)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (48)
.changeset/open-facts-obey.md(1 hunks).sizes.json(5 hunks).sizes/dom.js(23 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(6 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(1 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(3 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
🧰 Additional context used
🧬 Code graph analysis (24)
packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/dom/resume.ts (4)
.sizes/dom.js (13)
branch(125-125)branch(848-849)branch(1708-1713)branch(1933-1934)branch(1973-1976)render(1803-1804)i(28-28)i(758-758)i(983-983)i(1004-1004)i(1755-1755)i(1799-1799)i(1806-1808)packages/runtime-tags/src/common/types.ts (2)
BranchScope(6-19)AccessorProp(50-50)packages/runtime-tags/src/html/writer.ts (1)
render(1183-1195)packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (4)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)packages/runtime-tags/src/html/writer.ts (1)
flush(1045-1055)
packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/main.test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (3)
isFlush(22-24)isWait(18-20)resolveAfter(30-36)
packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)packages/runtime-tags/src/html/writer.ts (1)
flush(1045-1055)
packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (6)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
steps(3-3)packages/runtime-tags/src/html/writer.ts (1)
flush(1045-1055)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (3)
packages/runtime-class/src/translator/taglib/core/parse-module-code.js (1)
fn(14-14)packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (1)
node(167-167)
packages/runtime-tags/src/dom/control-flow.ts (7)
packages/runtime-tags/src/common/types.ts (3)
BranchScope(6-19)AccessorProp(50-50)Scope(20-32)packages/runtime-tags/src/dom/scope.ts (4)
findBranchWithKey(27-36)removeAndDestroyBranch(55-61)insertBranchBefore(63-74)tempDetachBranch(76-91)packages/runtime-tags/src/dom/queue.ts (9)
queueEffect(60-65)pendingEffects(19-19)runEffects(104-108)placeholderShown(18-18)prepareEffects(82-102)queueRender(24-46)pendingScopes(20-20)PendingRender(7-12)queuePendingRender(48-58)packages/runtime-tags/src/dom/renderer.ts (5)
createAndSetupBranch(57-67)Renderer(16-25)setupBranch(69-74)_content(76-119)createBranch(29-55)packages/runtime-tags/src/dom/schedule.ts (1)
schedule(6-20)packages/runtime-tags/src/common/helpers.ts (1)
decodeAccessor(100-101)packages/runtime-tags/src/dom.ts (1)
_content(56-56)
packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/common/types.ts (2)
packages/runtime-tags/src/dom/queue.ts (1)
PendingRender(7-12)packages/runtime-tags/src/dom/renderer.ts (1)
Renderer(16-25)
packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 84-84: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 84-84: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
922d7a4 to
88d2d3e
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
♻️ Duplicate comments (1)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
74-76: Address the empty script tag edge case.As noted in the past review comment, calling
walker.nextNode()unconditionally after a script element can skip the next sibling when the script is empty. For empty script tags with no children,walker.nextNode()will move to the next sibling instead of staying within the script's descendants (because there are none).Apply this diff to fix the edge case:
if (isScript) { - walker.nextNode(); + if (node.hasChildNodes()) { + walker.nextNode(); + } }
🧹 Nitpick comments (2)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
1-5: Steps/flush wiring looks correct; consider clarifying the commentThe import and
stepssequence ({}, wait(1), flush) fit the new async/flush testing pattern, andskip_equivalent = truemakes sense for this streaming-specific behavior. As a tiny nit, you might rephrase the comment on Line 5 to more explicitly describe the scenario (e.g., “// parent removed before flush” or similar), to make the intent clearer to future readers.packages/runtime-tags/src/__tests__/main.test.ts (1)
494-494: Minor typo:prevResumLogshould beprevResumeLog.The variable name is missing an "e" for consistency with
resumeLogandresumeLogs.- let prevResumLog = ""; + let prevResumeLog = "";Also update the usages on lines 501 and 521:
- if (resumeLog !== prevResumLog) { + if (resumeLog !== prevResumeLog) {- prevResumLog = resumeLog; + prevResumeLog = resumeLog;
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (140)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (40)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(23 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(6 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(1 hunks)
🚧 Files skipped from review as they are similar to previous changes (22)
- .sizes/comments.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
- .sizes/counter.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/placeholders-nested/test.ts
- packages/runtime-tags/src/tests/fixtures/await-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- package.json
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/test.ts
- packages/runtime-tags/src/tests/utils/resolve.ts
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/tags/recurse.marko
- .changeset/open-facts-obey.md
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/test.ts
- .sizes.json
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/tests/fixtures/async-reorder-nested-batched-resolve/test.ts
- packages/runtime-tags/src/tests/fixtures/async-resolve-out-of-order/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-single/test.ts
- packages/runtime-tags/src/tests/fixtures/async-state/test.ts
🧰 Additional context used
🧬 Code graph analysis (10)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/main.test.ts (2)
packages/runtime-tags/src/__tests__/utils/resolve.ts (3)
isFlush(22-24)isWait(18-20)resolveAfter(30-36)packages/runtime-tags/src/__tests__/utils/track-mutations.ts (2)
createMutationTracker(10-118)log(41-46)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (3)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/try-effects-catch-state/test.ts (1)
steps(1-1)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)packages/runtime-tags/src/html/writer.ts (1)
flush(1045-1055)
packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 84-84: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 84-84: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
🪛 GitHub Actions: CI
packages/runtime-tags/src/__tests__/main.test.ts
[error] 447-447: AssertionError in interop- Event handler: Render body tags to class (CSR). Snapshot mismatch or runtime divergence detected during CSR path in interop tests.
[error] 461-461: AssertionError in interop- Event handler: Render body tags to class (CSR). CSR path failure observed in interop tests.
[error] 473-473: AssertionError in interop- Nested tags to class: CSR path mismatch in interop tests.
🔇 Additional comments (28)
packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
1-5: Fixture update aligns with new async/flush test patternImporting
flushalongsidewaitand wiringsteps = [{}, flush, wait(2)]plusskip_equivalent = truematches the in-order streaming fixture pattern used elsewhere. This looks consistent and correct for the async reject scenario.packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (1)
1-5: Async test steps andskip_equivalentflag look consistent and correctImporting
flushalongsidewaitand updatingstepsto[{}, flush, wait(2)], plusskip_equivalent = truefor in-order streaming, matches the pattern used in related async fixtures and keeps the test harness contract intact. No issues from a correctness or clarity standpoint..sizes/name-cache.json (1)
1-1: No typo found—review comment from prior iteration was incorrect.A search of the codebase reveals no instances of the "Detatched" misspelling. The property is correctly spelled "DetachedAwait" throughout the source code (e.g., in
packages/runtime-tags/src/common/accessor.tsand referenced in control-flow logic). The name-cache.json mappings are consistent with the correct spelling.packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (1)
1-3: Flush step sequencing in this fixture looks consistent with other async testsImporting
flushfrom../../utils/resolveand inserting it betweenwait(1)andwait(2)matches the pattern used in other fixtures (for example,packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts, line 2) and aligns with thewaithelper contract frompackages/runtime-tags/src/__tests__/utils/resolve.ts, lines 3-7. I don’t see any issues with this step sequence.packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (3)
1-1: LGTM!The
flushimport is correctly added and used in the steps array.
3-3: LGTM!The addition of
flushbefore the wait step aligns with the PR's in-order streaming pattern and provides explicit control over pending operation processing.
5-5: LGTM!The
skip_equivalentflag appropriately indicates that this test uses in-order streaming semantics, consistent with the pattern applied across other fixtures in this PR.packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
1-3: Flush-based step sequencing looks consistent and correctImporting
flushfrom../../utils/resolveand inserting it as the second step before the firstwait(1)/clickpair matches the updated async/streaming test pattern used in related fixtures; the resulting sequence is coherent and should exercise the new flush behavior without altering the intended interactions.packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko (1)
1-9: LGTM – fixture cleanly exercises await + closure behavior with placeholderImport, await usage, local
valuestate, click handler, and conditional span all align with an async/streaming regression fixture: you get a loading placeholder whileresolveAfter(0, 1)is pending, then verify that the awaited block’s closure still sees and updatesvaluecorrectly. I don’t see any issues to block this from landing.packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko (4)
3-3: LGTM: Async script introduces test-appropriate timing.The change from immediate assignment to
await resolveAfter(1)before settingvalue = 1correctly introduces asynchronous behavior for testing the await/update/resume flow.
7-7: LGTM: Await expression correctly structured.The
await|value|=resolveAfter(value, 2)syntax properly awaits the promise and assigns the result, with appropriate placeholder fallback.
11-11: LGTM: Log element properly defined.The
pre/$logelement correctly creates a reference for the logging scripts and uses an appropriate element type for preserving formatted log output.
9-10: Verify test assertions match the new logging approach.The refactored logging scripts correctly append to the centralized
$logelement. However, since this replaces previous DOM updates to separate inside/outside elements, ensure that the corresponding test assertions have been updated to check the log output instead.Verify that the test expectations in the corresponding test file check for the new log output format:
#!/bin/bash # Description: Check if test expectations match the new logging output # Find the test file for this fixture fd -t f "test\.ts|test\.js|\.test\." packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/ # Show the test expectations to verify they check for log output rg -A 10 "await-update-before-resume" packages/runtime-tags/src/__tests__/.sizes/dom.js (5)
770-786: LGTM: OptionalresumeIdparameter added.The
_closure_getfunction signature has been extended with an optionalresumeIdparameter. This is used to register the closure signal for resumption (line 784). Since the parameter is optional and checked before use, this change is backward compatible.
1-1: This is an intentionally tracked bundle size metric file.The
.sizes/dom.jsfile is not a stray build artifact but rather an intentionally committed file used to track bundle size changes. There's a dedicatedbuild:sizesscript in package.json that generates these outputs. While reviewing minified code is challenging, this file serves a legitimate purpose in the monorepo's CI pipeline for monitoring runtime package sizes. Focus verification on the source changes (inpackages/runtime-tags/or related source files) that generated this output rather than the minified code itself.
79-79: This file is a size-optimized build artifact, not source code requiring verification across the codebase.The
.sizes/dom.jsfile is a minified/obfuscated output file generated as part of the build process to measure size impact. The property renames (g→f, o→n, u→t) are minification transformations, not refactoring of live source code. Searches of the actual source codebase found no references to the old property patterns (instance.g, instance.o, instance.u, renderer.g), confirming that no inconsistencies exist in the runtime code itself. This is working as designed for size optimization.Likely an incorrect or invalid review comment.
1740-1799: LGTM: Async render tracking and heap ordering verified.The rendering queue refactoring correctly introduces
asyncRendersLookupfor tracking renders deferred by pending awaits. The implementation maintains the following invariants:
- Heap insertion (queuePendingRender): Sift-up with parent index
(i-1)>>1maintains min-heap property whererender.a - parent.a >= 0- Heap extraction (runRenders): Sift-down with proper child selection maintains min-heap ordering on
render.avalues- Lookup swapping: In
run(), async renders are captured in the separate map then merged back; inprepareEffects(), maps are swapped to maintain render isolation during effect preparation- Deferred render tracking: Line 1864 correctly stores renders in
asyncRendersLookupwhen in pending await scopes- Property renames are systematic:
a(key),g(scope),u(signal),o(value)
1188-1318: Test coverage for the refactored async promise handling is comprehensive and adequate.The codebase includes extensive test fixtures specifically for await scenarios, including
await-update-after-resume,try-effects-async, andawait-closure-in-order. These fixtures verify:
- Multiple awaits within try blocks with effects setup/teardown
- Placeholder rendering during pending awaits
- Error handling with
@catchin await contexts- Value updates and closure handling after promise resolution
- Rapid interaction sequences (e.g., multiple button clicks triggering new promises)
The test infrastructure supports multiple render modes (SSR, CSR, resume/hydrate), DOM mutation tracking, and step-based interaction testing with snapshot verification. The refactored logic for tracking await counters, managing placeholder branches, and deduplicating effects is exercised through these existing fixtures.
packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko (1)
1-7: LGTM!This test fixture correctly demonstrates the await-closure pattern: a reactive
valueis declared, mutated via button click, and captured within the asyncawaitblock to verify closure behavior during pending renders.packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
3-12: Consider whetherskip_equivalentshould be exported.The sibling fixture
await-closure-in-order/test.tsexportsskip_equivalent = truefor in-order streaming semantics. If this fixture also tests in-order streaming behavior, it may need the same flag for consistency.packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
1-3: LGTM!The test fixture correctly defines steps for testing await updates after resume with flush and wait sequencing.
packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
1-5: LGTM!The updated steps with two
flushentries beforewait(3)correctly model in-order streaming behavior, andskip_equivalent = trueappropriately flags that resume and CSR paths may differ due to streaming semantics.packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
1-18: LGTM!The fixture correctly tests await-closure behavior with in-order streaming, using interleaved
wait,click, andflushsteps. Theskip_equivalentflag appropriately indicates streaming-specific behavior.packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
1-5: LGTM!Three
flushentries correctly model the nested async resolution order, with each flush corresponding to a level in the nested structure.packages/runtime-tags/src/__tests__/main.test.ts (2)
243-256: LGTM!The streaming API refactor using
browser.stream(chunks)with aflushNextcontroller is cleaner than the previous open/close pattern. The loop correctly advances through chunks with microtask pauses.
376-409: LGTM!The
runStepsfunction cleanly orchestrates the resume path with proper handling of wait, flush, and function updates. The auto-flush loop at lines 403-408 ensures all pending flushes are processed after explicit steps complete.packages/runtime-tags/src/__tests__/utils/create-browser.ts (2)
6-6: LGTM! API change aligns with new streaming approach.The type signature correctly defines the new
streammethod that returns a continuation function, replacing the previousopen/closeAPI.
27-45: LGTM! Clean queue-based RAF implementation.The batching logic correctly groups all callbacks scheduled in the same event loop iteration and executes them with a consistent timestamp, which is appropriate for a test environment.
88d2d3e to
520271a
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/runtime-tags/src/common/accessor.ts (1)
36-42: Enum value collision:PendingRendersandTagVariableboth use "T".Both
PendingRenders = "T"(line 36) andTagVariable = "T"(line 41) share the same string value. While these properties are currently used on different branch objects in different code paths, this collision creates a maintenance risk. If either property is later used in a shared context or if the code evolves, they will silently overwrite each other on the same scope object.Assign a unique value to
PendingRenders:- PendingRenders = "T", + PendingRenders = "W",
♻️ Duplicate comments (4)
package.json (1)
69-69: Version[email protected]may not exist on npm.This issue was already flagged in a previous review. Ensure version 5.0.1 is published before merging, or revert to
^5.0.0.packages/runtime-tags/src/__tests__/main.test.ts (1)
524-528: Fallback comparison handles edge case when no logs match.This is consistent with the past review comment. The fallback to raw log comparison when
!expected && actualensures tests don't silently pass when the matching algorithm fails to correlate any logs. This seems like a reasonable safety net.packages/runtime-tags/src/__tests__/utils/create-browser.ts (2)
69-69: Add type guard before accessingtagNameproperty.The code assumes
nodeis an Element, but TreeWalker can return any Node type. While this works because non-Element nodes returnundefinedfor tagName (makingisScriptfalse), it's safer to add an explicit type check.- const isScript = (node as Element).tagName === "SCRIPT"; + const isScript = node.nodeType === 1 && (node as Element).tagName === "SCRIPT";
74-76: Edge case:walker.nextNode()may skip wrong node for empty scripts.For empty
<script></script>tags, callingwalker.nextNode()skips the next sibling instead of script content. While uncommon in test fixtures, consider guarding this.if (isScript) { - walker.nextNode(); + if (node.hasChildNodes()) { + walker.nextNode(); + } }
🧹 Nitpick comments (9)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
3-3:stepssequence with doubleflushappears intentional but could use a hintUsing
[{}, flush, flush, wait(2)]makes sense for exercising multiple streaming flush passes before the final timed wait; if this is tied to a specific regression, consider a brief comment explaining why two flushes are required to avoid future confusion.packages/runtime-tags/src/translator/util/optional.ts (1)
246-251:somehelper looks correct and consistent; one optional simplificationThe implementation matches the rest of this helper module (same
Opt<T>handling and index semantics) and correctly mirrorsArray.prototype.somefor the array case and the singleton case via!!cb(data, 0).If you want to reduce duplication and keep behavior aligned with
find, you could optionally implementsomein terms offind:-export function some<T>( - data: Opt<T>, - cb: (item: T, index: number) => boolean, -): boolean { - return data ? (Array.isArray(data) ? data.some(cb) : !!cb(data, 0)) : false; -} +export function some<T>( + data: Opt<T>, + cb: (item: T, index: number) => boolean, +): boolean { + return !!find(data, cb); +}This keeps all the iteration/
Opt<T>edge cases in one place but is purely an optional cleanup; current code is fine as-is.packages/runtime-tags/src/translator/util/signals.ts (2)
247-268: Minor cleanup in closure signal builder usageThe closure branch logic looks correct (canonical binding, avoiding
closureSignalBuilderfor dynamic closures, and passing an optional resume id into_closure_get). One small improvement: you already storeconst closureSignalBuilder = getClosureSignalBuilder(section);but then ignore it and callgetClosureSignalBuilder(section)!again inside theif. Using the local variable avoids the extra lookup and reads more clearly:- const closureSignalBuilder = getClosureSignalBuilder(section); - - if (closureSignalBuilder && !isDynamicClosure(section, closure)) { - return getClosureSignalBuilder(section)!(closure, render); - } + const closureSignalBuilder = getClosureSignalBuilder(section); + + if (closureSignalBuilder && !isDynamicClosure(section, closure)) { + return closureSignalBuilder(closure, render); + }
1041-1062: Dynamic closure resume vs subscribe under placeholders—double‑checkgetSerializeReason(section)The new branch for dynamic closures under a try placeholder:
- Skips
_subscribe(...)wheneverunderTryPlaceholder(section)is true.- Emits a
_script(scopeId, resumeId)only ifconst reason = getSerializeReason(section)is truthy.Two things to verify here:
- Signature/semantics of
getSerializeReason: Everywhere else it’s called with a second argument (binding or accessor). CallinggetSerializeReason(section)with just the section must be supported and should return a section‑level reason; otherwise this will either be a type error or alwaysundefined, and the_scriptwill never be emitted.- Coverage when
reasonis falsy: In theunderTryPlaceholder(section)branch, ifreasonis falsy you get neither the_scriptnor the_subscribehook, so dynamic closures in that scope would have no resume/subscription path at all. If the intention is “delay running renders but always wire a resume hook,” consider basingreasonon the same section‑level decision used later (section.serializeReason/sectionSerializeReason) or unconditionally emitting the_scriptand lettinggetExprIfSerializedhandle gating.For example, you might reuse the section serialize reason:
- if (underTryPlaceholder(section)) { - const reason = getSerializeReason(section); - if (reason) { - getHTMLSectionStatements(section).push( - t.expressionStatement( - getExprIfSerialized( - section, - reason, - callRuntime( - "_script", - getScopeIdIdentifier(section), - t.stringLiteral(getResumeRegisterId(section, closure)), - ), - ), - ), - ); - } - } else { + if (underTryPlaceholder(section)) { + const reason = section.serializeReason ?? true; + getHTMLSectionStatements(section).push( + t.expressionStatement( + getExprIfSerialized( + section, + reason, + callRuntime( + "_script", + getScopeIdIdentifier(section), + t.stringLiteral(getResumeRegisterId(section, closure)), + ), + ), + ), + ); + } else { addWriteScopeBuilder(section, (expr) => callRuntime("_subscribe", identifier, expr), ); }(adjusting
reasonto whatever section‑level value is actually intended).packages/runtime-tags/src/common/types.ts (1)
1-2: Consider simplifying the redundant import.
Rendereris imported twice on line 2: once asClientRendererand once asRenderer. SinceRendereris directly used on line 18 forDetachedAwait, the alias may be unnecessary.-import type { Renderer as ClientRenderer, Renderer } from "../dom/renderer"; +import type { Renderer } from "../dom/renderer";Then update line 13 to use
Rendererinstead ofClientRenderer, or keep both if the semantic distinction aids readability.packages/runtime-tags/src/dom/queue.ts (1)
16-16: Clarify the semantics ofasyncRendersLookupinitialization states.The type
typeof pendingRendersLookup | undefined | 0uses0as a sentinel. While this works, consider documenting why0is used instead of justundefinedto distinguish "not initialized" from "cleared after run."packages/runtime-tags/src/__tests__/main.test.ts (1)
494-494: Typo:prevResumLogshould beprevResumeLog.This is a minor typo that doesn't affect functionality but impacts readability.
- let prevResumLog = ""; + let prevResumeLog = "";And update the usages at lines 501 and 521:
- if (resumeLog !== prevResumLog) { + if (resumeLog !== prevResumeLog) { ... - prevResumLog = resumeLog; + prevResumeLog = resumeLog;packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
14-16: Non-null assertion could throw if button is not found.The
clickhelper function uses the non-null assertion operator (!) on line 15, which will throw a runtime error if no button exists in the container. While this may be intentional for tests (fail fast if structure is wrong), consider whether a more descriptive error message would be helpful for debugging.Apply this diff to add a more descriptive error:
function click(container: Element) { - container.querySelector("button")!.click(); + const button = container.querySelector("button"); + if (!button) { + throw new Error("Expected button element not found in container"); + } + button.click(); }packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
16-18: Non-null assertion could throw if button is not found.The
clickhelper function uses the non-null assertion operator (!) on line 17, which will throw a runtime error if no button exists in the container. While this may be intentional for tests (fail fast if structure is wrong), consider whether a more descriptive error message would be helpful for debugging.Apply this diff to add a more descriptive error:
function click(container: Element) { - container.querySelector("button")!.click(); + const button = container.querySelector("button"); + if (!button) { + throw new Error("Expected button element not found in container"); + } + button.click(); }
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (142)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (51)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(6 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(1 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
🚧 Files skipped from review as they are similar to previous changes (22)
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/template.marko
- .sizes/counter.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/test.ts
- packages/runtime-tags/src/translator/core/try.ts
- .changeset/open-facts-obey.md
- packages/runtime-tags/src/tests/fixtures/async-nested-resolve-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reorder-nested-batched-resolve/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/await-tag/test.ts
- packages/runtime-tags/src/tests/utils/resolve.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts
- packages/runtime-tags/src/common/accessor.debug.ts
- packages/runtime-tags/src/tests/fixtures/await-remove-parent/test.ts
- packages/runtime-tags/src/dom/resume.ts
- packages/runtime-tags/src/tests/fixtures/async-resolve-out-of-order/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/template.marko
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/try-effects-async/test.ts
- packages/runtime-tags/src/tests/fixtures/async-state/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
- packages/runtime-tags/src/tests/fixtures/catch-single-success-async/test.ts
🧰 Additional context used
🧬 Code graph analysis (16)
packages/runtime-tags/src/dom/signals.ts (4)
packages/runtime-tags/src/dom/resume.ts (1)
_resume(316-318)packages/runtime-tags/src/dom.ts (1)
_resume(58-58)packages/runtime-tags/src/html/writer.ts (1)
_resume(164-176).sizes/dom.js (1)
closureSignal(765-773)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (2)
packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (2)
node(167-167)clone(865-894)
packages/runtime-tags/src/common/types.ts (2)
packages/runtime-tags/src/dom/queue.ts (1)
PendingRender(7-12)packages/runtime-tags/src/dom/renderer.ts (1)
Renderer(16-25)
packages/runtime-tags/src/dom/queue.ts (4)
.sizes/dom.js (21)
render(1798-1799)key(1742-1743)value(155-159)value(1077-1077)scope(118-118)i(28-28)i(751-751)i(979-979)i(1000-1000)i(1750-1750)i(1794-1794)i(1801-1803)parentIndex(1752-1753)parent(1172-1174)effects(1763-1763)prevRenders(1776-1778)branch(125-125)branch(841-842)branch(1703-1708)branch(1928-1929)branch(1968-1971)packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)packages/runtime-tags/src/dom/template.ts (2)
value(130-132)value(133-135)packages/runtime-tags/src/common/types.ts (1)
AccessorProp(50-50)
packages/runtime-tags/src/__tests__/main.test.ts (2)
packages/runtime-tags/src/__tests__/utils/resolve.ts (3)
isFlush(22-24)isWait(18-20)resolveAfter(30-36)packages/runtime-tags/src/__tests__/utils/track-mutations.ts (2)
createMutationTracker(10-118)log(41-46)
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (4)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/html/writer.ts (1)
flush(1045-1055)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 84-84: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 84-84: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: test: node@24
- GitHub Check: test: node@20
- GitHub Check: test: node@22
520271a to
9faf6c7
Compare
Codecov Report❌ Patch coverage is Additional details and impacted files@@ Coverage Diff @@
## main #2982 +/- ##
==========================================
+ Coverage 88.99% 89.02% +0.02%
==========================================
Files 372 372
Lines 46332 46429 +97
Branches 3880 3892 +12
==========================================
+ Hits 41235 41332 +97
+ Misses 5048 5046 -2
- Partials 49 51 +2 ☔ View full report in Codecov by Sentry. 🚀 New features to boost your workflow:
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/runtime-tags/src/common/accessor.ts (1)
36-42: Critical: Duplicate enum values will cause collisions.
PendingRenders = "T"(line 36) andTagVariable = "T"(line 41) have the same string value. This will cause property collisions at runtime when both are used on the same object, leading to silent data corruption or unexpected behavior.Assign a unique value to
PendingRenders:- PendingRenders = "T", + PendingRenders = "W",Or use another unused letter. Current usage in this enum: A-S, T (TagVariable), U, V (DetachedAwait).
♻️ Duplicate comments (2)
package.json (1)
69-69: Critical: Non-existent dependency version blocks installation.This issue was flagged in a prior review and remains unresolved. The version
[email protected]does not exist in the npm registry; the latest published version is5.0.0. This will causenpm installto fail.Please clarify intent:
- If
5.0.1is a planned release, confirm it will be published before this PR merges.- Otherwise, update to
^5.0.0(or the latest stable version).- "mocha-snap": "^5.0.1", + "mocha-snap": "^5.0.0",Alternatively, confirm the exact version constraint you need via:
npm view mocha-snap versions --json | tail -10packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
69-76: Previous review feedback on type guard and empty script handling remains unaddressed.The past review comments regarding:
- Adding a type guard before accessing
tagName(line 69) - non-Element nodes would returnundefinedfortagName- Handling empty script tags (lines 74-76) - calling
walker.nextNode()on an empty script would skip the next sibling instead of script contentThese issues are still present in the code.
🧹 Nitpick comments (6)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (1)
3-3: Consider documenting why three flushes are needed.The three consecutive
flushcalls likely correspond to the nesting depth being tested, but this isn't immediately clear. Adding a brief comment would improve maintainability.Example:
-export const steps = [{}, flush, flush, flush, wait(4)]; +// Three flushes for three levels of nested placeholders +export const steps = [{}, flush, flush, flush, wait(4)];packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
5-5: LGTM! Appropriate flag for streaming mode differences.The
skip_equivalentflag correctly identifies that this test exhibits different behavior in certain modes due to the parent removal timing relative to the flush operation.Consider expanding the comment to clarify which modes or scenarios this affects, e.g.:
-export const skip_equivalent = true; // try removed before flush +export const skip_equivalent = true; // in-order streaming: parent removed before flush completespackages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko (1)
6-6: Swapping inline Promise forresolveAfterkeeps behavior explicit and controllableReplacing
await=new Promise(setImmediate)withawait=resolveAfter(0, 1)makes the async timing explicit and consistent with the rest of the async fixtures, which should improve determinism in the test harness. The hard-coded(0, 1)arguments also seem fine for a single scheduling step in this recursive case, as long as you intend every level to share the same step id.If you later need depth-aware scheduling, consider deriving one of the arguments from
input.level, and validate behavior with the existing async-deep-recursive snapshot tests.packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko (2)
4-5: Clarify: await result is not captured.The promise from
resolveAfter(0, 1)resolves with value1, but this result is not assigned or used. Instead,valueis independently initialized to1on line 5. If the test fixture intends to use the resolved value, consider capturing it. If the intent is solely to ensure closures execute after the await completes, the current implementation is acceptable but could benefit from a comment explaining the discarded result.
8-9: Condition is always true.Since
valueis initialized to1(line 5) and only incremented by the button'sonClickhandler (line 7), the conditionif=(value > 0)will always evaluate to true. If this test fixture intends to validate conditional rendering or reactivity with await/closures, this is acceptable. Otherwise, consider adding logic to decrementvalueor adjusting the condition to test a meaningful branch.packages/runtime-tags/src/__tests__/main.test.ts (1)
530-554: Remove commented-out code block.This large block of commented-out code appears to be the previous implementation that was replaced by the new matching algorithm above. Dead code should be removed to maintain code clarity.
- // // when the steps for a test contains more than one input, - // // the updates are not run for the resume test - // // so we trim the csrLogs to match the number of resumeLogs - // const step1 = (config.steps as unknown[] | undefined)?.[1]; - // const isAsyncRender = step1 && (isFlush(step1) || isWait(step1)); - // let csrLogs = [...(await csr()).tracker.getRawLogs(true)]; - // let skip = 0; - // if (isAsyncRender) { - // while (csrLogs[skip + 1]?.startsWith(`# Render ASYNC`)) { - // skip++; - // } - // for (const resumeLog of resumeLogs.slice(1)) { - // if (resumeLog.startsWith(`# Render ASYNC`)) { - // skip--; - // } else { - // break; - // } - // } - // csrLogs[skip] = csrLogs[skip].replace(`# Render ASYNC`, `# Render`); - // } - // csrLogs = csrLogs.slice(skip, resumeLogs.length + skip); - // assert.strictEqual( - // csrLogs.join("\n\n").replace(/[cs]M_[a-z0-9]+/g, "%id"), - // resumeLogs.join("\n\n").replace(/[cs]M_[a-z0-9]+/g, "%id"), - // );
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (142)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (51)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(6 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(1 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
🚧 Files skipped from review as they are similar to previous changes (25)
- packages/runtime-tags/src/common/accessor.debug.ts
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/template.marko
- .sizes/counter.ssr/entry.js
- packages/runtime-tags/src/dom/resume.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/await-tag/test.ts
- packages/runtime-tags/src/tests/utils/resolve.ts
- packages/runtime-tags/src/translator/util/signals.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/template.marko
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/test.ts
- packages/runtime-tags/src/tests/fixtures/catch-single-reject-async/test.ts
- packages/runtime-tags/src/translator/core/try.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/test.ts
- .sizes.json
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
- packages/runtime-tags/src/dom/signals.ts
- packages/runtime-tags/src/translator/util/optional.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
- .changeset/open-facts-obey.md
- packages/runtime-tags/src/tests/fixtures/async-reorder-nested-batched-resolve/test.ts
- packages/runtime-tags/src/tests/fixtures/try-effects-async/test.ts
- packages/runtime-tags/src/tests/fixtures/async-state/test.ts
🧰 Additional context used
🧬 Code graph analysis (14)
packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/common/types.ts (2)
packages/runtime-tags/src/dom/queue.ts (1)
PendingRender(7-12)packages/runtime-tags/src/dom/renderer.ts (1)
Renderer(16-25)
packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (4)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)packages/runtime-tags/src/html/writer.ts (1)
flush(1045-1055)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
.sizes/dom.js (4)
packages/runtime-tags/src/dom/signals.ts (2)
_closure_get(181-209)subscribeToScopeSet(145-157)packages/runtime-tags/src/dom/renderer.ts (3)
createAndSetupBranch(57-67)_content(76-119)createBranch(29-55)packages/runtime-tags/src/dom/queue.ts (3)
queueRender(24-46)queuePendingRender(48-58)run(67-80)packages/runtime-tags/src/dom/scope.ts (2)
findBranchWithKey(27-36)insertBranchBefore(63-74)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (2)
packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (1)
node(167-167)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (2)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(4-8)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 84-84: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
[warning] 84-84: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: test: node@24
- GitHub Check: test: node@22
- GitHub Check: test: node@20
🔇 Additional comments (57)
packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (2)
1-3: Async steps wiring looks consistent with new flush semanticsImporting
flushand inserting it into thestepssequence alongside shorter waits and theclickhelper fits the async fixture pattern and should exercise the new pending-render behavior without issues.
5-5:skip_equivalentflag is clear and self‑documentingExporting
skip_equivalent = truewith the// in-order streamingcomment is a clean way to let the shared harness special‑case this fixture’s expectations. No changes needed.packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (3)
1-1: Import usage looks consistent
flushandwaitare both used insteps, so this import shape is good and matches the existing test utilities pattern.
3-3: Clarify intent of the doubleflushin steps
steps = [{}, flush, flush, wait(2)]is a subtle sequence; the duplicateflushlikely exercises the new pending‑render queue semantics (e.g., multiple pending scopes/placeholders). Please confirm that twoflushentries are required here (vs a singleflush) so future readers don’t “simplify” this back to one and break coverage.
5-5:skip_equivalentflag aligns with in‑order streaming behaviorSetting
skip_equivalent = truefor this placeholder fixture makes sense if the in‑order streaming output would otherwise be treated as equivalent by the shared harness. No changes requested.packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
1-5: LGTM: async out-of-order fixture wiring looks consistentThe added
flushimport is correctly used insteps, and thesteps = [{}, flush, wait(3)]shape matches the described async test patterns. Exportingskip_equivalent = truewith the in-order streaming comment is consistent with how these fixtures indicate skipped equivalent runs. No issues from this file.packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
1-3: Import + double-flush step sequence look correctThe new
flushimport is used as intended, and adding twoflushsteps beforewait(4)makes the sequencing of pending renders explicit and is consistent with the async fixture patterns described for this PR. No issues from a typing or runtime perspective in this file.packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (2)
1-1: LGTM!The addition of the
flushimport is appropriate for the updated test steps.
5-5: LGTM!The
skip_equivalentflag is appropriately documented and indicates that this test exhibits different behavior with in-order streaming, which aligns with the PR's async rendering changes.packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (2)
1-1: LGTM! Import addition aligns with new test pattern.The addition of
flushto the imports is correct and necessary for the updated test steps.
3-3: Test step sequence updated for explicit flush control.The modification from
wait(2)towait(1), flushprovides more precise control over render timing, consistent with the broader pattern for testing in-order streaming behavior.Verify that this timing sequence still correctly exercises the scenario where the parent is removed during an await operation.
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko (5)
1-1: LGTM!Import statement is correct and resolveAfter is the appropriate test utility for this async fixture.
2-2: LGTM!Stateful variable declaration is correctly structured for testing closure behavior with an initial non-zero value.
3-3: LGTM!Button correctly implements the onClick handler to increment and display the stateful value, enabling testing of closure behavior during async operations.
4-5: LGTM!The await block correctly establishes an async boundary for testing closure behavior. The resolved value from
resolveAfter(0, 3)is not used in the template, which appears intentional for this fixture focused on in-order rendering and closure semantics rather than value propagation.
6-7: LGTM!Conditional block correctly tests closure access to the stateful value across the async boundary, verifying that updates from the onClick handler are properly visible in the rendering logic.
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (3)
3-3: LGTM! Flush step added appropriately.The insertion of
flushbetween the initial step andwait(1)ensures pending renders are flushed before the timeout, which aligns with the PR's changes to pending-render tracking.
5-5: LGTM! Flag added for in-order streaming behavior.The
skip_equivalentflag appropriately handles differences in test behavior for in-order streaming mode, consistent with the PR's async rendering changes.
1-1: No action needed. The import offlushfromutils/resolve.tsis valid—flushis properly exported as a test helper at line 10 of resolve.ts.packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (3)
1-1: LGTM: Import updated to include flush helper.The addition of
flushto the imports is necessary for its usage in the steps array and follows the pattern established across other test fixtures in this PR.
3-3: Test sequence updated to include flush operation.The addition of
flushbetween the initial state andwait(2)aligns with the PR's changes to handle in-order streaming for async rendering. This modification is consistent with the pattern applied across other async test fixtures.
5-5: Test configuration flag added for streaming behavior.The
skip_equivalentflag indicates this test should skip equivalence checks due to in-order streaming semantics. This is consistent with similar flags added across other async test fixtures in this PR.packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko (1)
1-1: Import path and shared test utility are correct
resolveAfteris properly exported from../../../utils/resolve(line 30 of resolve.ts) and the relative path from this directory correctly resolves tosrc/__tests__/utils/resolve. The usage pattern withresolveAfter(0, 1)is consistent across all async test fixtures in the codebase.packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (3)
1-1: LGTM! Proper import of the flush helper.The addition of
flushto the imports is correct and necessary for the updated test steps.
5-5: LGTM! Appropriate flag for in-order streaming tests.The
skip_equivalentflag is correctly added to indicate this test uses in-order streaming semantics, consistent with the pattern across other async test fixtures in this PR.
3-3: Flush count correctly matches nesting structure.The three
flushcalls correspond to the three-level nesting depth in the template's first async chain:result1→result2→result3. Each flush resolves one level of nestedawait|resolveblocks, followed bywait(4)to allow the second nested chain to complete. The change aligns with the PR's in-order streaming semantics..sizes/comments.ssr/entry.js (1)
1-1: LGTM!Size annotation updated to reflect the 1-byte brotli reduction from the internal key refactoring.
.sizes/name-cache.json (1)
1-1: LGTM!The name cache has been updated consistently with the new internal key scheme. The previously flagged typo (
$kDetatchedAwait) is no longer present in this version..sizes/dom.js (8)
75-81: LGTM!The renderer identification property check (
"f" in normalized) is consistent with the updated_contentreturn shape at line 896 wheref: idis set.
748-780: LGTM!The closure signal accessor renames (
kfor scopeInstancesAccessor,lfor signalIndexAccessor,qfor index) are applied consistently. The newresumeIdparameter in_closure_getproperly wires up resume registration when provided.
895-902: LGTM!The renderer object shape is cleanly defined with the new property layout (
ffor id,bfor params,dfor dynamicScopesAccessor). This is consistently referenced throughout the file.
1181-1311: Substantial refactoring of async/await handling with pending render queues.The new
_await_promiseimplementation introduces branch-aware pending render tracking:
awaitCounter(stored attryBranch.O) tracks pending async operations with anicounter andc()completion callback- Pending renders are queued in
branch.Tduring async resolution and drained on completion (line 1278)- Effect deduplication (lines 1283-1295) prevents duplicate effects when
awaitCounter.m(resume effects function) is availableThe placeholder/try-branch coordination logic is complex but appears correct. One observation: the
awaitCounter.mproperty is set during resume at line 273 (branch.O.m = render.m).
1741-1758: LGTM!The
queuePendingRenderextraction enables reuse for deferred render queuing during async resolution. The min-heap insertion (lines 1751-1757) correctly usesrender.afor priority ordering.
1797-1866: LGTM!The
runRenderenhancement (lines 1851-1866) properly postpones renders when a branch has pending async operations (branch.T). Postponed renders are tracked in bothasyncRendersLookup(for deduplication) andbranch.T(for later replay). The heap operations inrunRenderscorrectly use therender.akey for ordering.
1384-1466: LGTM!The
_dynamic_tagfunction correctly uses the updated property names:normalizedRenderer.ffor renderer identification,.n/.tfor closure signals/values,.dfor dynamic scopes accessor, and.bfor params. The closure iteration (lines 1443-1447) properly applies each closure signal with its corresponding value.
1990-1999: LGTM!The mount function correctly accesses
this.bfor the input params signal, consistent with the updated_contentreturn shape.packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (1)
1-3: LGTM!The test fixture correctly imports
flushandwaitutilities and defines a step sequence that exercises the flush-based streaming behavior. The pattern aligns with other async test fixtures in the PR.packages/runtime-tags/src/__tests__/utils/create-browser.ts (3)
27-45: LGTM! Clean queue-based batching for requestAnimationFrame.The implementation correctly batches callbacks within the same tick and flushes them together with a consistent timestamp, which is appropriate behavior for test environments simulating browser behavior.
83-89: Static analysis XSS warning is a false positive here.The
document.write(chunks[0])usage is safe in this context - this is test infrastructure that writes pre-generated HTML output from the test harness, not user-supplied content. The chunks are controlled test data.
47-80: Streaming implementation looks correct overall.The walker-based approach for multi-chunk streaming with flush markers (
<!--%%FLUSH%%-->) is a clean solution for simulating incremental HTML streaming in tests. TheWeakMapfor tracking target nodes avoids memory leaks.packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
1-3: LGTM!New test fixture correctly imports utilities and defines a step sequence for testing await update after resume behavior.
packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
1-5: LGTM!The test fixture correctly adopts the flush-based sequencing pattern with
skip_equivalentflag to indicate in-order streaming behavior. The inline comment provides helpful context.packages/runtime-tags/src/common/types.ts (3)
1-2: LGTM - Import changes align with new exports.The import of
PendingRenderfrom../dom/queueand the combinedRenderer/ClientRendererimport properly support the new per-branch pending render tracking introduced in this PR.
16-18: New BranchScope fields support per-branch async rendering.The new fields enable branch-aware rendering:
PlaceholderBranch: tracks the placeholder branch during async loadingPendingRenders: queues renders that should be delayed until async content resolvesDetachedAwait: holds the renderer for detached await contentThe
| 0union pattern is consistent with the codebase's use of falsy sentinels.
44-48: AwaitCounter field changes support new async coordination logic.
m?: () => unknown[]- Changed from a simple flag to a function that returns pending effects for deduplicationc: () => void | 1- Now returns1when the counter is still pending, enabling conditional flow in callersThese changes align with the new
_await_promiseimplementation in control-flow.ts that usesawaitCounter.c()return value andawaitCounter.m()for effect deduplication.packages/runtime-tags/src/dom/queue.ts (4)
7-12: PendingRender export enables per-branch render tracking.Making
PendingRendera public export allows control-flow.ts to use this type for theBranchScope[AccessorProp.PendingRenders]field.
48-58: Heap insertion logic is correct.The
queuePendingRenderfunction correctly implements min-heap upheap insertion:
- Push the new element to the end
- Bubble up by swapping with parent while the new element's key is smaller
- The comparison
render.___key - parent.___key >= 0correctly breaks when the heap property is satisfiedThis ensures renders are processed in priority order based on scope/signal keys.
202-219: Branch-aware render deferral logic.When a render's scope has a branch with
PendingRenders, the render is:
- Stored in
asyncRendersLookupfor later lookup (lines 207-210)- Pushed to the branch's
PendingRendersarray (line 211)- The original
runRenderis skippedThis correctly defers renders until the async content resolves and calls
queuePendingRenderon the deferred renders.
67-80: The asyncRendersLookup lifecycle correctly handles deferred render queuing.The flow works as intended:
- Line 69: Create a new
asyncRendersLookupMap at the start- Line 74: Transfer accumulated deferred renders to
pendingRendersLookupafterrunRenders()- Line 75: Reset both
asyncRendersLookupandrenderingto 0This pattern ensures deferred renders accumulated during execution become the pending renders for the next cycle, maintaining proper queue continuity.
packages/runtime-tags/src/dom/control-flow.ts (4)
60-63: Branch selection logic for await handling.The code correctly distinguishes between:
awaitBranch: The direct branch associated with this awaittryBranch: The branch with placeholder content (or falls back to awaitBranch)This enables proper placeholder/content switching at the try boundary level rather than individual await level.
65-101: AwaitCounter initialization and completion callback.The
c()callback handles two distinct cases:
- Lines 70-76: When
tryBranch === scope[branchAccessor]- replaces the comment node with the await branch's content- Lines 77-89: Otherwise - inserts content before placeholder and removes placeholder branch
The
return 1at line 69 when counter is still positive signals to callers that more awaits are pending.
105-145: First-await placeholder setup with requestAnimationFrame.The
requestAnimationFramecallback (lines 107-144) sets up placeholders only if:
- This is the first await (
!scope[promiseAccessor] && !awaitCounter.i++)- The await branch exists
The logic inside handles:
- Creating and inserting placeholder branch if
PlaceholderContentexists- Detaching the try branch with a marker node if no placeholder but no
DetachedAwaitThis defers visual changes to the next animation frame, preventing flicker.
178-207: Effect deduplication when processing pending renders.The deduplication at lines 189-206 prevents duplicate effects:
- Collect all current pending effects into a
fnScopesMap keyed by function- For each effect from
awaitCounter.m(), only queue it if not already in pending effectsThis prevents the same effect from running twice when multiple async operations complete.
packages/runtime-tags/src/__tests__/main.test.ts (4)
14-14: New test utilities imported for flush handling.The
isFlushandresolveAfterimports support the new streaming-based test flow where flush points are explicitly controlled.
243-256: SSR test updated to use streaming API.The test now:
- Uses
browser.stream(chunks)instead ofbrowser.open()- Calls
flushNext()in a loop until all chunks are processed- Awaits a microtask (
await 1) between flushesThis aligns with the PR's goal of testing in-order streaming behavior.
308-309: CSR correctly skips flush steps.Flush steps are only meaningful for SSR/resume tests where content is streamed. CSR renders synchronously, so flush markers are appropriately skipped with
continue.
376-409: Test refactored with explicit flush control.The
runStepsfunction processes each step type appropriately:
- Waits for async operations
- Logs "FLUSH" when explicitly flushed (line 388)
- Auto-flushes remaining chunks with "FLUSH (auto)" label (lines 403-408)
- Uses
resolveAfter(0, 1)at line 404 to introduce a 1ms delay before auto-flushing
9faf6c7 to
df7f03c
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
packages/runtime-tags/src/common/accessor.ts (1)
36-41: Enum value collision:PendingRendersandTagVariableboth use "T".Both
PendingRenders(line 36) andTagVariable(line 41) are assigned the same string value"T". This will cause property collisions when both are used on the same scope object, leading to silent data corruption or unexpected behavior.Assign a unique value to
PendingRenders:- PendingRenders = "T", + PendingRenders = "W",Alternatively, if
TagVariableis no longer needed, it should be removed to free up "T" forPendingRenders.
♻️ Duplicate comments (2)
packages/runtime-tags/src/dom/control-flow.ts (1)
238-245: Previous review concern: VerifypendingScopes.pop()is balanced.This was flagged in a prior review. The
pendingScopes.pop()at line 244 assumescreateBranch(called at line 238) always pushes topendingScopes. IfcreateBranchconditionally pushes (e.g., only when aCreatingflag is set), this pop could underflow.Verify that
createBranchunconditionally pushes topendingScopes:#!/bin/bash # Find createBranch implementation and check for pendingScopes.push ast-grep --pattern 'function createBranch($$$) { $$$ }'packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
70-70: Add type guard before accessingtagNamedespite previous review.The code accesses
tagNameon a node without verifying it's an Element. Although a previous review marked this as addressed in commits 17c4ba7-df7f03c, the unsafe access still appears in the current code. TreeWalker can return any Node type (Text, Comment, Element), and accessingtagNameon non-Element nodes will returnundefined.Apply this diff to add a type guard:
- const isScript = (node as Element).tagName === "SCRIPT"; + const isScript = node.nodeType === 1 /* Node.ELEMENT_NODE */ && (node as Element).tagName === "SCRIPT";
🧹 Nitpick comments (13)
packages/runtime-tags/src/dom/resume.ts (1)
164-171: Consider addressing the TODO for cross-flush parent syncing.The TODO at lines 164-166 indicates a potential gap when a branch participates in a separate flush from its parent. The orphan branch handling below (lines 167-171) correctly assigns
ParentBranchand adds toBranchScopes, but if the parent accessor syncing issue materializes in certain streaming scenarios, it could cause orphaned branches to miss updates.Would you like me to help design a solution for the cross-flush scenario, or should this be tracked as a follow-up issue?
packages/runtime-tags/src/dom/control-flow.ts (1)
106-149: Complex placeholder/detach logic warrants documentation.The conditional rendering logic at lines 106-149 handles three distinct cases:
- First await with placeholder content (lines 119-133)
- First await without placeholder but with detached await (lines 134-142)
- Subsequent awaits (reuses existing branch)
The nested conditions and
requestAnimationFramescheduling make this difficult to follow. Consider adding inline comments explaining each branch.packages/runtime-tags/src/translator/core/try.ts (1)
145-157: DOM translator: mirrored placeholder handling keeps targets in syncThe dom
enterpath mirrors the html logic for detecting@placeholderviatag.node.extra?.attributeTags?.["@placeholder"]and settingsetTryHasPlaceholder(bodySection, true), which should ensure consistent behavior between html and dom targets for try placeholders. If this pattern grows, you might later factor the shared@placeholderdetection + flagging into a tiny helper to avoid divergence, but it’s fine as-is.packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
12-25: Consider clarifying the loop exit condition.The loop condition on lines 18-21 combines multiple concerns: explicit ID matching and dynamic promise-count assignment. While functionally correct, the side-effect assignment
nextId = __RESOLVE_STATE__.promises.sizewithin the condition may reduce readability.Consider extracting the condition for clarity:
async function getWaitPromise(id?: number): Promise<number> { let nextId = id; while (true) { const curId = await getSharedPromise(nextId); await new Promise((r) => setImmediate(r)); + + // Exit if waiting for explicit ID or all promises resolved + const allPromisesResolved = curId === __RESOLVE_STATE__.promises.size; if ( - id !== undefined || - curId === (nextId = __RESOLVE_STATE__.promises.size) + id !== undefined || allPromisesResolved ) { - return nextId!; + return id !== undefined ? id : curId; } + nextId = __RESOLVE_STATE__.promises.size; } }
90-100: Consider documenting the timing strategy.The triple-nested timing pattern (setTimeout → setImmediate → setTimeout) appears intentional for ensuring multiple event loop cycles, but lacks explanation. This could be fragile if Node.js or browser timing semantics change.
Add a comment explaining the timing requirements:
function tick() { + // Multi-phase delay ensures promises resolve across multiple event loop cycles: + // 1. setTimeout: defer to next timer phase + // 2. setImmediate: defer to check phase + // 3. setTimeout: final timer phase before resolution return new Promise<number>((r) => { setTimeout(() => { setImmediate(() => { setTimeout(() => { r(++__RESOLVE_STATE__.lastId); }); }); }); }); }packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
1-3: LGTM! Quad flush for deep recursion.The four
flushcalls appropriately correspond to the deep recursive nesting in this test fixture. The migration to ID-based resolution is consistent with the broader refactor.Consider whether this fixture should also include
skip_equivalent = truefor in-order streaming, consistent with similar async fixtures like async-resolve-out-of-order, placeholder-single, and async-nested-resolve-in-order, which all have this flag set..sizes/dom.js (7)
748-762: Closure signal plumbing: verify owner-scope selectionThe new
_closure/_closure_getcontract (usingk/l/qfor scope-set accessor, per-scope index, and signal index) is internally consistent:
_closure_getsetsclosureSignal.k = "B" + accessorandclosureSignal.l = "C" + accessor, subscribes each scope toownerScope[closureSignal.k], and recordsclosureSignal.q._closurereadsscope[___scopeInstancesAccessor](the set created bysubscribeToScopeSet) and dispatches toclosureSignals[childScope[___signalIndexAccessor]], i.e., the right closure per child scope.One thing to double‑check at the translator level is that
getOwnerScope(scope)always returns a non‑null owner for the closure scopes you generate; otherwisesubscribeToScopeSetwill throw. If there are any cases where closures should attach to something other thanscope._, it’s worth adding a small assertion or test to cover that.Also applies to: 763-780
1099-1109: Dynamic content attribute: scope subscription looks correct but relies oncontent.eThe
_attr_contentchanges:
- Normalize content renderers via
normalizeDynamicRenderer.- Track the active content id as
scope["D"+nodeAccessor] = content?.f.- Subscribe the host scope into
content.e’s dynamic scope set viacontent.dwhen provided.This matches the new
_content(..., dynamicScopesAccessor)shape. Please just confirm that translator‑generateddynamicScopesAccessoralways points at a scope set on the same owner passed to_content(socontent.eis the right owner forsubscribeToScopeSet), especially for nested/forwarded content cases.
1185-1221: Await bookkeeping: branch/try selection and counter lifecycleThe front half of
_await_promisenow:
- Decodes
promiseAccessorandbranchAccessor.- Locates
awaitBranch = scope[branchAccessor]andtryBranch = findBranchWithKey(scope, "Q") || awaitBranch.- Reuses or creates
tryBranch.OasawaitCounterwithicount andc()finalizer, optionally seeded fromrender.pvia the earlierbranch.O = render.p?.[branchId]hook.- Uses
awaitBranch.Tas a per‑branch queue of pending renders and marksplaceholderShownfor the currentpendingEffectsbatch.The logic for reusing
awaitCounteracross resumptions and scoping it to the nearest try/placeholder branch looks sound, and thec()implementation correctly switches between in‑place replacement and placeholder‑branch handoff. I don’t see obvious reentrancy issues, but this is subtle enough that I’d strongly suggest tests around:
awaitinside and outside<try>with and without placeholders.- Multiple awaits sharing the same try/placeholder region.
- Destroyed branches where
tryBranch.Owas set but never resolved.
1222-1257: Deferring renders while await is pending, then flushing on resolveThe success/error handlers in
_await_promisenow:
On
then:
- Guard on
thisPromise === scope[promiseAccessor]to avoid races.- Schedule
runviaqueueMicrotaskbefore queueing a render to apply the resolution.- When the await branch has a pending renderer (
V), push it intopendingScopes, runsetupBranch, insert the branch before the placeholder node, and remove the placeholder.- Run
params?.(awaitBranch, [data]), flush any queued renders inawaitBranch.TthroughqueuePendingRender, and, ifawaitCounter.mis present (resumed case), reconcile those effects against the currentpendingEffectsbefore re‑queuing.On
catch:
- Reset
awaitCounter.iandscope[promiseAccessor], and route torenderCatchviaqueueRender.The design matches the PR goal of deferring renders in pending scopes and then replaying them after resolution, with care to avoid double‑running effects. I’d recommend adding at least one test where closures inside the awaited block enqueue renders both before and after resolution to ensure the
fnScopesreconciliation correctly avoids duplicatequeueEffectcalls.Also applies to: 1258-1303, 1305-1310
1734-1750: New render queue keying andpendingRendersLookupsemanticsThe new render queue logic:
- Introduces
asyncRendersLookupandpendingRendersLookup.- Uses
key = scopeKey * scopeKeyOffset + signalKeywithscopeKeyOffset = 1e3and stores renders as{ a: key, g: scope, u: signal, o: value }.- Deduplicates by
{scopeKey, signalKey}whensignalKey >= 0, updating.oinstead of pushing new renders.The heap maintenance in
queuePendingRender(acompared as the priority key) looks correct. The only place this could go wrong is if translator‑assignedsignalKeycan ever be ≥ 1000, which would cause key collisions across scopes. If that’s not guaranteed today, I’d either:
- Bump
scopeKeyOffsetsignificantly (e.g.,1e6), or- Add a small assertion in dev builds that
Math.abs(signalKey) < scopeKeyOffset.
1765-1775:run/prepareEffectsbookkeeping for async renders is subtle but coherent
runnow:
- Initializes
asyncRendersLookup = new Map()per run.- Calls
runRenders()underrendering = 1.- On exit, swaps
pendingRendersLookup = asyncRendersLookup, clearsasyncRendersLookup,pendingRenders, andpendingEffects.
prepareEffects:
- Temporarily isolates
pendingRendersandpendingEffects.- Points
asyncRendersLookupat the currentpendingRendersLookupwhile using a freshpendingRendersLookupfor the prepared run.- Restores both lookups and queues after running
fn+runRenders().That wiring ensures:
- Normal runs see the latest async‑deferred renders via
pendingRendersLookup.- Nested
prepareEffectsruns don’t lose async bookkeeping from the outer run.Given how easy it is to regress this, I’d add tests that:
- Queue renders that get deferred into
branch.T, then trigger furtherqueueRendercalls for the same key before resolution, and ensure only the finalvalueis applied.- Nest
prepareEffectsinside outerrun()calls with pending awaits to confirm lookups are restored correctly.Also applies to: 1778-1793
1827-1869:_enable_catch’s deferral of renders viabranch.TandasyncRendersLookupOnce
_enable_catchruns, it:
Wraps
runEffectsso that whenplaceholderShown/caughtErrorcontain the effects array, it respects pending tries and branch destruction when invoking functions.Wraps
runRenderso that any render whose branch or ancestor has a truthy.Tis:
- Recorded in
asyncRendersLookupunder itsakey, and- Pushed into the waiting
branch.Tarray, instead of being run immediately.This matches the new
_await_promisebehavior whereawaitBranch.Taccumulates renders while the await is pending and then flushes them viaqueuePendingRenderupon resolution. The ancestor scan (for (let branch = render.g.F; branch; branch = branch.N)) ensures we also defer descendants of a pending await block.Given the interplay between
placeholderShown,caughtError,asyncRendersLookup, andbranch.T, I’d be inclined to add a regression test that:
- Throws inside a render within a pending await branch,
- Verifies it is caught by
renderCatchand that no stale renders remain scheduled once the branch is destroyed.
818c65d to
c4d04e5
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 4
♻️ Duplicate comments (4)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
75-77: Minor edge case: empty script tags may cause walker to skip next sibling.This was flagged in a previous review and remains unaddressed. For empty
<script></script>tags, callingwalker.nextNode()would incorrectly skip the next sibling node instead of the script's (non-existent) content.packages/runtime-tags/src/dom/control-flow.ts (2)
162-179: Conditional push to pendingScopes - ensure balanced with pop.Line 167 conditionally pushes
awaitBranchtopendingScopesonly whenDetachedAwaitis truthy. This push must be balanced by a corresponding pop. The pop occurs in_await_contentat line 244, but that pop is unconditional. If the push never happens (whenDetachedAwaitis falsy), the unconditional pop will cause a stack underflow.This issue was previously flagged in the past review comments for lines 238-245.
237-245: Unconditional pop without guaranteed push - duplicate issue.Line 244 unconditionally calls
pendingScopes.pop(), but the corresponding push at line 167 in_await_promiseonly occurs whenDetachedAwaitis truthy. This creates a stack imbalance when the push doesn't happen.As noted in the past review comment for lines 238-245, either:
- Guard the pop with the same condition:
if (scope[branchAccessor][AccessorProp.DetachedAwait]) pendingScopes.pop();- Verify
pendingScopes.lengthbefore popping- Restructure the flow to ensure balanced push/pop operations
.sizes/dom.js (1)
1314-1325:pendingScopes.pop()in_await_contentcan remove the wrong scope whencreateBranchcreates nested scopes
_await_contentcurrently does:(scope[branchAccessor] = createBranch(...)).V = renderer; pendingScopes.pop();
createBranchcallscreateScope, which pushes the branch scope intopendingScopes, and then runsrenderer.h(clone/walk). That walk can itself callcreateScopefor nested scopes (loops, conditionals, nested awaits, etc.), pushing additional scopes after the branch.As a result,
pendingScopes.pop()removes only the last scope created duringcreateBranch—often a nested child scope—not necessarily theawaitBranchyou just created. The consequences:
- The wrong child scope can be left with
H === 1indefinitely (since it was popped and never cleared inrunRenders), so_or, closures, and otherscope.H‑sensitive logic will treat it as “pending” forever.- Conversely, the
awaitBranchyou intended to keep pending may remain inpendingScopesand haveHcleared to0at the end of the current render pass, defeating the goal of delaying its activation until the promise resolves.Instead of blindly popping,
pendingScopesshould specifically remove theawaitBranchinstance created bycreateBranch, leaving any nested scopes intact. Conceptually:- (((scope[branchAccessor] = createBranch( - scope.$, - renderer, - scope, - scope[nodeAccessor].parentNode, - )).V = renderer), - pendingScopes.pop()); + let awaitBranch = (scope[branchAccessor] = createBranch( + scope.$, + renderer, + scope, + scope[nodeAccessor].parentNode, + )); + awaitBranch.V = renderer; + // Remove exactly this branch from pendingScopes, without touching nested scopes. + let i = pendingScopes.lastIndexOf(awaitBranch); + if (i !== -1) pendingScopes.splice(i, 1);The precise implementation should be done in the TypeScript source, but the key is: remove the specific
awaitBranchfrompendingScopes, not just the last entry.
🧹 Nitpick comments (4)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
90-100: Document the timing guarantees of the tick mechanism.The
tickfunction uses a specific sequence ofsetTimeout,setImmediate, and anothersetTimeoutto advance state. This timing pattern is critical for test determinism but is not documented.Add a comment explaining why this specific sequence is necessary:
function tick() { + // Three-phase tick ensures all microtasks and I/O callbacks complete + // before advancing to the next ID, providing deterministic test ordering return new Promise<number>((r) => { setTimeout(() => {packages/runtime-tags/src/dom/queue.ts (1)
202-219: LGTM with minor observation.The
runRenderwrapper correctly routes renders to branch-specificPendingRendersqueues when in-order streaming is active. The deferred renders are tracked inasyncRendersLookupfor later resolution.Minor: Line 213 uses
branch!non-null assertion, but since we're insidewhile (branch), the assertion is redundant (though harmless).- branch = branch![AccessorProp.ParentBranch]; + branch = branch[AccessorProp.ParentBranch];packages/runtime-tags/src/translator/util/signals.ts (2)
247-268: Closure branch builder logic looks good; minor cleanup opportunityThe new closure branch in
getSignallooks consistent: usinggetCanonicalBinding(referencedBindings)for the accessor, consultinggetClosureSignalBuilder(section)only for non‑dynamic closures, and falling back to_closure_getwith the optional resume id tied togetResumeRegisterId(section, closure)is coherent with how other resume ids are generated.Two small nits:
- You already read the builder into
closureSignalBuilder, but then re‑read it when calling:if (closureSignalBuilder && !isDynamicClosure(section, closure)) { return getClosureSignalBuilder(section)!(closure, render); }This could just use the local variable to avoid the extra map lookup:
- const closureSignalBuilder = getClosureSignalBuilder(section); - - if (closureSignalBuilder && !isDynamicClosure(section, closure)) { - return getClosureSignalBuilder(section)!(closure, render); - } + const closureSignalBuilder = getClosureSignalBuilder(section); + + if (closureSignalBuilder && !isDynamicClosure(section, closure)) { + return closureSignalBuilder(closure, render); + }
- Since
getCanonicalBindingnever returnsundefinedgiven aBinding(it returns eitherbinding.upstreamAliasorbinding), the non‑null assertion!onclosureis technically unnecessary, though harmless. You might consider dropping it for clarity.
16-16: Placeholder‑aware resume wiring is sensible; confirmunderTryPlaceholderandgetSerializeReason(section)semanticsThe new placeholder plumbing —
getTryHasPlaceholder/setTryHasPlaceholder,underTryPlaceholder, and its use both in_closure_get’s resume id and the HTML dynamic‑closure path — fits together well:
some(closure.closureSections, underTryPlaceholder)drives whether_closure_getreceives a per‑closure resume register, matching the script resume id you emit inwriteHTMLResumeStatementsviagetResumeRegisterId(section, closure).- In the HTML path, switching from
_subscribeto emitting a_scriptresume whenunderTryPlaceholder(section)is true ensures placeholder branches serialize a resume entry instead of eagerly wiring subscribers.- Importing
some(andfind) from./optionalis consistent with how the rest of this file uses the optional helpers.Two behaviors worth double‑checking:
underTryPlaceholderonly checks ancestors, not the section itselffunction underTryPlaceholder(section: Section) { let curSection = section.parent; while (curSection) { if (getTryHasPlaceholder(curSection)) { return true; } curSection = curSection.parent; } return false; }Given this, a section on which
setTryHasPlaceholderwas called directly will not returntruefromunderTryPlaceholder(section); only its descendants will. That’s consistent with the name (“under”), but it relies onsetTryHasPlaceholderbeing applied to some ancestor section rather than the placeholder section itself.If you ever tag the placeholder section itself (for example the section that actually renders the placeholder content),
underTryPlaceholderwill treat that section as not under a placeholder, and dynamic closures in that section will go down the_subscribepath instead of the_scriptresume path.If your intent is “this section is within any try‑with‑placeholder region (including the root)”, you may want to change it to start from the section itself:
-function underTryPlaceholder(section: Section) { - let curSection = section.parent; +function underTryPlaceholder(section: Section) { + let curSection: Section | undefined = section; while (curSection) { if (getTryHasPlaceholder(curSection)) { return true; } curSection = curSection.parent; } return false; }Otherwise, it’d be good to leave a brief comment in
underTryPlaceholderor at the callsites clarifying that only descendants of atryWithPlaceholdersection are considered “under” it.
- New zero‑arg
getSerializeReason(section)usageIn the HTML dynamic‑closure case you now do:
if (underTryPlaceholder(section)) { const reason = getSerializeReason(section); if (reason) { getHTMLSectionStatements(section).push( t.expressionStatement( getExprIfSerialized( section, reason, callRuntime( "_script", getScopeIdIdentifier(section), t.stringLiteral(getResumeRegisterId(section, closure)), ), ), ), ); } } else { addWriteScopeBuilder(section, (expr) => callRuntime("_subscribe", identifier, expr), ); }Elsewhere in this file
getSerializeReasonis always called with a binding or accessor argument. Assuming you’ve added/adjusted its overloads to support a section‑only call (returning a section‑level serialize reason that matches howsection.serializeReasonwas previously used), this makes sense, but it’s a subtle API change.Can you confirm that:
setTryHasPlaceholderis always applied on an ancestor section when you expectunderTryPlaceholder(section)to be true, not on the section itself?getSerializeReasonhas an overload/signature that supports being called with only the section and returns the intended section‑level serialize reason?If either assumption isn’t true,
underTryPlaceholderand/or the newgetSerializeReason(section)call may need a small adjustment.Also applies to: 105-107, 265-267, 275-284, 1041-1062
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (155)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (80)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/if-member-expression-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/user-effect-abort-signal/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(7 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(2 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
✅ Files skipped from review due to trivial changes (1)
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
🚧 Files skipped from review as they are similar to previous changes (36)
- packages/runtime-tags/src/tests/fixtures/catch-single-reject-async/test.ts
- .changeset/open-facts-obey.md
- package.json
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
- packages/runtime-tags/src/dom/signals.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-single-node-only-child-in-parent/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-single-text-node-with-text-before/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/template.marko
- packages/runtime-tags/src/tests/fixtures/return-value-registered/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/await-remove-parent/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/template.marko
- packages/runtime-tags/src/tests/fixtures/async-reorder-nested-batched-resolve/test.ts
- .sizes/comments.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/test.ts
- packages/runtime-tags/src/tests/fixtures/migrate-effect-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/user-effect-abort-signal/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-static-multiple/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/common/accessor.debug.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/test.ts
- packages/runtime-tags/src/translator/core/try.ts
- packages/runtime-tags/src/tests/fixtures/assign-destructured-reduced/test.ts
- packages/runtime-tags/src/tests/fixtures/try-effects-async/test.ts
- packages/runtime-tags/src/tests/fixtures/html-comment-var/test.ts
- packages/runtime-tags/src/tests/fixtures/error-async/test.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/template.marko
- packages/runtime-tags/src/tests/fixtures/function-references-normalize/test.ts
- packages/runtime-tags/src/tests/fixtures/async-state/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/dynamic-tag-input-intersection/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/test.ts
- .sizes/counter.ssr/entry.js
🧰 Additional context used
🧬 Code graph analysis (22)
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (3)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
skip_equivalent(5-5)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (3)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
skip_equivalent(5-5)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts (16)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/common/types.ts (2)
packages/runtime-tags/src/dom/queue.ts (1)
PendingRender(7-12)packages/runtime-tags/src/dom/renderer.ts (1)
Renderer(16-25)
packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts (6)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts (8)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts (16)
.sizes/dom.js (2)
steps(35-35)steps(41-41)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/translator/util/signals.ts (3)
packages/runtime-tags/src/translator/util/state.ts (1)
createSectionState(22-38)packages/runtime-tags/src/translator/util/references.ts (2)
getCanonicalBinding(1410-1421)getScopeAccessorLiteral(1455-1469)packages/runtime-tags/src/translator/util/optional.ts (1)
some(246-251)
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/main.test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (4)
isFlush(39-41)isWait(35-37)resolveAfter(47-55)resetResolveState(66-71)
.sizes/dom.js (3)
packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)packages/runtime-tags/src/dom/template.ts (2)
value(130-132)value(133-135)packages/runtime-tags/src/dom/renderer.ts (4)
createAndSetupBranch(57-67)setupBranch(69-74)_content(76-119)createBranch(29-55)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (2)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (3)
packages/runtime-class/src/translator/taglib/core/parse-module-code.js (1)
fn(14-14)packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (1)
node(167-167)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 85-85: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 85-85: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: test: node@24
- GitHub Check: test: node@22
- GitHub Check: test: node@20
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko
Outdated
Show resolved
Hide resolved
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 2
♻️ Duplicate comments (7)
package.json (1)
69-69: 🔴 Non-existent dependency version blocks installation (unresolved from previous review).Line 69 specifies
[email protected], which does not exist on npm. The latest published version is5.0.0. This will causenpm installto fail, blocking the PR from being built and deployed.Either correct the version to
^5.0.0or confirm that5.0.1will be published before this PR merges.Apply this diff if correcting to the latest available release:
- "mocha-snap": "^5.0.1", + "mocha-snap": "^5.0.0",packages/runtime-tags/src/dom/resume.ts (1)
164-166: Typo in TODO comment already flagged.The spelling errors "seperate" → "separate" and "it's" → "its" were already identified in a previous review.
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
1-4: Uninitialized global state already flagged.The initialization issue with
declare let __RESOLVE_STATE__was already identified in a previous review, which noted it could cause runtime errors if accessed beforeresetResolveState()is called.
73-75: Default parameter initialization issue already flagged.The potential initialization order issue with
__RESOLVE_STATE__.lastIdin the default parameter was already identified in a previous review..sizes/dom.js (1)
1314-1325: This issue was previously flagged and remains unresolved.The past review comment correctly identified that
pendingScopes.pop()at line 1324 incorrectly assumescreateBranchleaves the newly created branch as the last pending scope. However,createBranchcan create nested scopes viarenderer.h(the clone function) which callswalk(), causing the pop to potentially remove the wrong scope.Since this is a generated/bundled file, the fix should be applied in the source TypeScript files (likely in
packages/runtime-tags/src/dom/control-flow.tsbased on the function name_await_content).packages/runtime-tags/src/dom/control-flow.ts (1)
162-173: ClarifypendingScopespush/pop invariants between_await_promiseand_await_content.In the success path of
_await_promise,pendingScopes.push(awaitBranch)only runs whenawaitBranch[AccessorProp.DetachedAwait]is truthy, but_await_contentunconditionally callspendingScopes.pop(). WhileArray.prototype.pop()on an empty array is runtime-safe, it can desynchronize the stack if_await_contentever runs without a corresponding push.If the translator/runtime guarantees that every
_await_contentinvocation is paired with a priorpendingScopes.pushfor the same branch, it would be helpful to either:
- Encode that invariant explicitly (e.g., in a MARKO_DEBUG assertion), or
- Defensively guard the pop, for example:
const branch = scope[branchAccessor] as BranchScope; (scope[branchAccessor] = createBranch( scope[AccessorProp.Global], renderer, scope, (scope[nodeAccessor] as ChildNode).parentNode!, ))[AccessorProp.DetachedAwait] = renderer; if (pendingScopes[pendingScopes.length - 1] === branch) { pendingScopes.pop(); }This keeps behavior unchanged under current invariants but prevents silent stack corruption if those invariants ever shift.
Also applies to: 238-245
packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
5-12: Tighten typings for window augmentation and script detection.Two small type-safety nits in the test helper:
window.__RESOLVE_STATE__
windowis cast toDOMWindow & { MessageChannel: any }, but later you assignwindow.__RESOLVE_STATE__. Under typical TS settings this will complain that__RESOLVE_STATE__does not exist on the type.To keep typings accurate without changing runtime behavior, consider:
const window = browser.window as unknown as DOMWindow & { MessageChannel: any; __RESOLVE_STATE__: any; }; window.__RESOLVE_STATE__ = (globalThis as any).__RESOLVE_STATE__;or, if you prefer a narrower cast:
(window as any).__RESOLVE_STATE__ = (globalThis as any).__RESOLVE_STATE__;
isScriptin the TreeWalker loop
createTreeWalker(parsed)can yield non-Element nodes (Document, Text, Comment, etc.), butisScriptis currently computed as:const isScript = (node as Element).tagName === "SCRIPT";which relies on an unchecked cast. A small guard keeps both runtime and types honest:
const isScript = node.nodeType === 1 /* Node.ELEMENT_NODE */ && (node as Element).tagName === "SCRIPT";This also aligns with the earlier review feedback around this check.
Also applies to: 28-46, 61-77
🧹 Nitpick comments (5)
packages/runtime-tags/src/translator/util/optional.ts (1)
246-251:somehelper is consistent with existing Opt utilities; consider falsy-singleton nuance as a low-priority follow-upThe implementation mirrors
find/toArray/forEachsemantics (array vs single vs undefined) and keeps the API surface nicely aligned.One minor nuance to be aware of: using
data ? ... : falsemeans a single falsy value (e.g.,0,"",false) will be treated as “no data” and immediately returnfalse. This is consistent with several other helpers in this file, so it’s not a regression, but if you ever need to support falsy singletons here, you’d want to switch to an explicitdata !== undefinedcheck and make the same adjustment across the other helpers for consistency.packages/runtime-tags/src/translator/util/signals.ts (1)
275-284: Clarify whether the placeholder-marked section itself should count as “under” a try placeholder
underTryPlaceholdercurrently starts fromsection.parent, so only descendants of a section marked viasetTryHasPlaceholderreturntrue; the section that was marked itself returnsfalse. Given thatsetTryHasPlaceholderis called on the try body section andunderTryPlaceholderis used both fromsome(closure.closureSections, underTryPlaceholder)andwriteHTMLResumeStatements(section), it’d be good to explicitly confirm this off‑by‑one in the ancestor chain is intentional.If the intent is “has any try-with-placeholder ancestor (including self)”, you could adjust to start from
sectioninstead ofsection.parent; otherwise, a brief comment or a rename likehasTryPlaceholderAncestorwould make the current behavior more obvious.packages/runtime-tags/src/dom/queue.ts (1)
202-219: Consider narrowing the type instead of casting.The type cast on line 207-208 assumes
asyncRendersLookupis never0orundefinedat this point. While this is guaranteed by the control flow (it's always initialized beforerunRenderis called), the cast could be avoided with better type narrowing.Consider adding a runtime assertion or restructuring to narrow the type:
try { let branch = render.___scope[AccessorProp.ClosestBranch]; while (branch) { if (branch[AccessorProp.PendingRenders]) { - (asyncRendersLookup as typeof pendingRendersLookup).set( + asyncRendersLookup!.set( render.___key, render, ); return branch[AccessorProp.PendingRenders].push(render); }Or add a type guard at the function entry if preferred.
packages/runtime-tags/src/__tests__/main.test.ts (2)
373-415: Consider invokingrun()during the auto-flush loop as well.In
resume:
- Explicit
isFlush(update)steps callflushNext(), thenrun(), thenawait 1before logging"FLUSH".- The later auto-flush loop (
while (hasFlush)) only doesawait resolveAfter(0, 1),flushNext(), and logs"FLUSH (auto)", without a correspondingrun()(or microtask yield afterflushNext).If additional DOM work or queued renders/effects can be scheduled when later chunks are streamed, skipping
run()here could leave pending work unflushed at the point logs are captured, potentially making resume logs diverge from CSR behavior.If parity with CSR is desired even for implicit flushes, consider aligning the auto-flush loop with the explicit flush path, e.g.:
while (hasFlush) { await resolveAfter(0, 1); tracker.beginUpdate(); hasFlush = flushNext(); run(); await 1; tracker.logUpdate("FLUSH (auto)"); }If the current behavior is intentional (e.g., auto flushes are meant to be purely network/HTML events without extra DOM queue drains), a brief comment would help future readers.
443-459: Verify whetherresetResolveStateshould also run for sanitized render suites.
resetResolveState()is wired intobeforeEachunderdescribe("render", ...), which ensures the shared__RESOLVE_STATE__is reset for the plainssr/resume/csrtests.The
describe("sanitized", ...)block reuses the samessr,resume, andcsrhelpers (and their internal caching) but does not have its ownbeforeEachreset. If__RESOLVE_STATE__influences howsteps,resolveAfter, or streaming behave, sanitized tests will observe whatever state was left after the last non-sanitized render test.If that coupling is not intentional, consider either:
- Moving
beforeEach(resetResolveState)up into the enclosingdescribe(entry, ...), or- Adding a parallel
beforeEach(resetResolveState)inside thesanitizeddescribe.Otherwise, a short comment clarifying that sanitized tests are expected to share resolve state with the prior render run would make this intention clearer.
Also applies to: 461-472
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (155)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (80)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/if-member-expression-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/user-effect-abort-signal/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(7 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(2 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
✅ Files skipped from review due to trivial changes (1)
- .sizes/comments.ssr/entry.js
🚧 Files skipped from review as they are similar to previous changes (39)
- .changeset/open-facts-obey.md
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-with-state/test.ts
- packages/runtime-tags/src/tests/fixtures/circular-tag-var-function-serialize/test.ts
- packages/runtime-tags/src/tests/fixtures/async-resolve-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/catch-single-reject-async/test.ts
- packages/runtime-tags/src/tests/fixtures/migrate-effect-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/await-remove-parent/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/template.marko
- packages/runtime-tags/src/tests/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/test.ts
- packages/runtime-tags/src/common/accessor.debug.ts
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/test.ts
- packages/runtime-tags/src/tests/fixtures/return-serialize-circular/test.ts
- packages/runtime-tags/src/tests/fixtures/function-references-optional-member-normalize/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/template.marko
- packages/runtime-tags/src/tests/fixtures/await-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/test.ts
- .sizes/counter.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/let-undefined-until-dom/test.ts
- packages/runtime-tags/src/tests/fixtures/async-nested-resolve-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/return-value-registered/test.ts
- packages/runtime-tags/src/tests/fixtures/function-references-normalize/test.ts
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/test.ts
- packages/runtime-tags/src/tests/fixtures/html-comment-var/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-single-node-only-child-in-parent/test.ts
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/tags/recurse.marko
- packages/runtime-tags/src/tests/fixtures/user-effect-abort-signal/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-static-multiple/test.ts
- packages/runtime-tags/src/tests/fixtures/lifecycle-tag-assignment/test.ts
- packages/runtime-tags/src/tests/fixtures/assign-destructured-reduced/test.ts
- packages/runtime-tags/src/tests/fixtures/async-nested-resolve-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/lifecycle-tag-this-attrs/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholders-nested/test.ts
- packages/runtime-tags/src/tests/fixtures/serialize-promise/test.ts
🧰 Additional context used
🧬 Code graph analysis (13)
packages/runtime-tags/src/dom/signals.ts (2)
packages/runtime-tags/src/dom/resume.ts (1)
_resume(316-318)packages/runtime-tags/src/html/writer.ts (1)
_resume(164-176)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/translator/util/signals.ts (6)
packages/runtime-tags/src/translator/util/state.ts (1)
createSectionState(22-38)packages/runtime-tags/src/translator/util/references.ts (2)
getCanonicalBinding(1410-1421)getScopeAccessorLiteral(1455-1469)packages/runtime-tags/src/translator/util/sections.ts (3)
isDynamicClosure(356-358)isImmediateOwner(348-350)Section(51-80)packages/runtime-tags/src/translator/util/scope-read.ts (1)
getScopeExpression(63-74)packages/runtime-tags/src/translator/util/optional.ts (1)
some(246-251)packages/runtime-tags/src/translator/util/serialize-guard.ts (1)
getExprIfSerialized(91-124)
packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts (15)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-10)
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/dom/queue.ts (1)
.sizes/dom.js (14)
render(1801-1802)key(1744-1745)scope(118-118)i(28-28)i(751-751)i(982-982)i(1003-1003)i(1752-1752)i(1797-1797)i(1804-1806)parentIndex(1754-1755)parent(1175-1177)effects(1765-1765)prevRenders(1778-1781)
.sizes/dom.js (3)
packages/runtime-tags/src/dom/signals.ts (2)
_closure_get(181-209)subscribeToScopeSet(145-157)packages/runtime-tags/src/dom/renderer.ts (1)
_content(76-119)packages/runtime-tags/src/dom/queue.ts (3)
queueRender(24-46)run(67-80)queuePendingRender(48-58)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(27-29)wait(6-10)
packages/runtime-tags/src/common/types.ts (2)
packages/runtime-tags/src/dom/queue.ts (1)
PendingRender(7-12)packages/runtime-tags/src/dom/renderer.ts (1)
Renderer(16-25)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 85-85: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 85-85: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko
Show resolved
Hide resolved
c4d04e5 to
0c484fc
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (7)
packages/runtime-tags/src/translator/util/signals.ts (1)
247-268: RedundantgetClosureSignalBuildercall on line 252.Line 252 calls
getClosureSignalBuilder(section)again, but the result was already stored in theclosureSignalBuildervariable on line 249.Apply this diff to use the cached value:
- return getClosureSignalBuilder(section)!(closure, render); + return closureSignalBuilder!(closure, render);packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
1-4: Initialization dependency:__RESOLVE_STATE__requires external setup.The
declare letpattern only types the variable but doesn't initialize it. The code relies onresetResolveState()being called externally (line 73 assigns toglobalThis.__RESOLVE_STATE__) before any utility functions are used.Verify that all test entry points call
resetResolveState()before usingwait,after, orresolveAfter:#!/bin/bash # Find test files that import from resolve but may not call resetResolveState rg -l 'from.*utils/resolve' packages/runtime-tags/src/__tests__/fixtures/ | while read file; do base=$(dirname "$file") if [ -f "$base/test.ts" ] && ! rg -q 'resetResolveState' "$base/test.ts"; then echo "Fixture may be missing resetResolveState: $base" fi done
79-81: Default parameter reads potentially uninitialized global.The default parameter
id: number = __RESOLVE_STATE__.lastId + 1is evaluated when the function is called. IfresetResolveState()hasn't been called yet, this will throw a runtime error.Consider computing the default inside the function body:
function getSharedPromise( - id: number = __RESOLVE_STATE__.lastId + 1, + id?: number, ): Promise<number> { + if (id === undefined) { + id = __RESOLVE_STATE__.lastId + 1; + } if (id < 1) {This defers the access to
__RESOLVE_STATE__until after the function body executes, reducing the risk of premature access.packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko (1)
2-2: Fix syntax error in variable declaration.Line 2 contains
let/value=1with an unexpected forward slash. This should belet value = 1.Apply this diff to fix the syntax:
-let/value=1 +let value = 1packages/runtime-tags/src/dom/resume.ts (1)
164-165: Fix typos in TODO comment (“separate”, “its”)The TODO reads: “seperate” and “it's”. It should be “separate” and the possessive “its”.
You could update it to something like:
-// TODO: when branch is part of a seperate flush than it's parent, we -// may need to set branch parent to accessor when visitScope is a branch +// TODO: when a branch is part of a separate flush than its parent, +// we may need to set the branch parent to the accessor when visitScope is a branchpackages/runtime-tags/src/__tests__/main.test.ts (1)
488-538: Confirmed: Comparison logic with fallback is intentional.The log comparison algorithm normalizes dynamic IDs and attempts to sequentially match resume logs to CSR logs. The fallback at lines 534-538 handles cases where the matching algorithm finds no correlations by falling back to direct full-log comparison. This was previously reviewed and confirmed as intentional behavior.
.sizes/dom.js (1)
1314-1325:pendingScopes.pop()still incorrectly assumescreateBranchleaves it as the last pending scope.As previously noted, the
createBranchcall at line 1318 can push multiple scopes topendingScopesthrough nestedwalkprocessing (viarenderer.h→walk→walkInternal→createScope). Thepop()at line 1324 only removes the last scope, which may not be theawaitBranchcreated at line 1318.This issue remains unresolved from the previous review.
🧹 Nitpick comments (2)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
70-77: Minor: Empty script tags may skip incorrectly.The logic calls
walker.nextNode()once to skip script descendants. For empty script tags, this advances to the next sibling instead of skipping descendants (since there are none).Consider checking for children before skipping:
if (isScript) { - walker.nextNode(); + if (node.hasChildNodes()) { + walker.nextNode(); + } }This is a minor edge case since empty script tags are uncommon in test fixtures.
packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
5-7: Consider adding a defensive check for the button element.The non-null assertion operator (
!) assumes a button will always exist. If the button is missing, this will throw a runtime error.Apply this diff if you want to add a defensive check:
function click(container: Element) { - container.querySelector("button")!.click(); + const button = container.querySelector("button"); + if (!button) throw new Error("Button not found in container"); + button.click(); }Alternatively, if the button's presence is guaranteed by the test setup, consider adding a comment to document this assumption.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (155)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (82)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-script-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/if-member-expression-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/user-effect-abort-signal/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(7 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(2 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
✅ Files skipped from review due to trivial changes (1)
- .sizes/comments.ssr/entry.js
🚧 Files skipped from review as they are similar to previous changes (38)
- .sizes/counter.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/return-serialize-circular/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-static-multiple/test.ts
- packages/runtime-tags/src/tests/fixtures/circular-tag-var-function-serialize/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/tags/recurse.marko
- packages/runtime-tags/src/tests/fixtures/if-member-expression-intersection/test.ts
- .sizes/name-cache.json
- packages/runtime-tags/src/tests/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reorder-nested-batched-resolve/test.ts
- packages/runtime-tags/src/tests/fixtures/async-resolve-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/tests/fixtures/return-value-registered/test.ts
- packages/runtime-tags/src/common/accessor.debug.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/template.marko
- packages/runtime-tags/src/tests/fixtures/lifecycle-tag-assignment/test.ts
- packages/runtime-tags/src/translator/core/try.ts
- packages/runtime-tags/src/tests/fixtures/user-effect-abort-signal/test.ts
- package.json
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/test.ts
- .changeset/open-facts-obey.md
- packages/runtime-tags/src/tests/fixtures/catch-single-reject-async/test.ts
- packages/runtime-tags/src/tests/fixtures/async-nested-resolve-in-order/test.ts
- packages/runtime-tags/src/common/types.ts
- packages/runtime-tags/src/tests/fixtures/merged-define-tag-templates/test.ts
- packages/runtime-tags/src/tests/fixtures/try-effects-async/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-with-state/test.ts
- packages/runtime-tags/src/translator/util/optional.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/template.marko
- packages/runtime-tags/src/tests/fixtures/html-comment-var/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-single-text-node-with-text-before/test.ts
- .sizes.json
- packages/runtime-tags/src/tests/fixtures/error-async/test.ts
- packages/runtime-tags/src/common/accessor.ts
- packages/runtime-tags/src/tests/fixtures/local-closure-script/test.ts
- packages/runtime-tags/src/tests/fixtures/function-references-optional-member-normalize/test.ts
- packages/runtime-tags/src/tests/fixtures/lifecycle-tag-this-attrs/test.ts
🧰 Additional context used
🧬 Code graph analysis (20)
packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts (2)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(33-35)wait(6-19)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts (5)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
after(21-31)flush(33-35)
packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (2)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(33-35)wait(6-19)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(33-35)wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(33-35)wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (4)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(33-35)wait(6-19)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
skip_equivalent(5-5)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)
packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/html-script-nonce/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)
packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(6-19)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (2)
packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (2)
node(167-167)clone(865-894)
packages/runtime-tags/src/dom/control-flow.ts (6)
packages/runtime-tags/src/common/types.ts (3)
BranchScope(6-19)AccessorProp(50-50)Scope(20-32)packages/runtime-tags/src/dom/scope.ts (4)
findBranchWithKey(27-36)removeAndDestroyBranch(55-61)insertBranchBefore(63-74)tempDetachBranch(76-91)packages/runtime-tags/src/dom/queue.ts (6)
queueEffect(60-65)pendingEffects(19-19)prepareEffects(82-103)queueRender(24-46)run(67-80)PendingRender(7-12)packages/runtime-tags/src/dom/renderer.ts (5)
createAndSetupBranch(57-67)Renderer(16-25)setupBranch(69-74)_content(76-119)createBranch(29-55)packages/runtime-tags/src/dom.ts (2)
run(57-57)_content(58-58)packages/runtime-tags/src/html.ts (1)
_content(33-33)
.sizes/dom.js (8)
packages/runtime-tags/src/dom/signals.ts (2)
_closure_get(181-209)subscribeToScopeSet(145-157)packages/runtime-tags/src/common/helpers.ts (1)
decodeAccessor(100-101)packages/runtime-tags/src/dom/resume.ts (1)
_resume(316-318)packages/runtime-tags/src/dom/template.ts (2)
value(130-132)value(133-135)packages/runtime-tags/src/dom/control-flow.ts (2)
setConditionalRenderer(474-524)renderCatch(279-310)packages/runtime-tags/src/dom/renderer.ts (3)
createAndSetupBranch(57-67)setupBranch(69-74)createBranch(29-55)packages/runtime-tags/src/dom/queue.ts (9)
_enable_catch(160-220)runEffects(105-109)placeholderShown(18-18)pendingEffects(19-19)prepareEffects(82-103)queueRender(24-46)run(67-80)queuePendingRender(48-58)rendering(21-21)packages/runtime-tags/src/dom/scope.ts (3)
findBranchWithKey(27-36)removeAndDestroyBranch(55-61)insertBranchBefore(63-74)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 85-85: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
[warning] 85-85: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (4)
- GitHub Check: test: node@24
- GitHub Check: test: node@20
- GitHub Check: test: node@22
- GitHub Check: Analyze (javascript)
0c484fc to
5eede97
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (1)
packages/runtime-tags/src/dom/resume.ts (1)
164-166: Fix grammar in TODO comment (“it’s” → “its”)The TODO still reads “separate flush than it's parent”; this should be “its parent” (possessive), e.g.:
- // TODO: when branch is part of a separate flush than it's parent, we + // TODO: when branch is part of a separate flush than its parent, weYou might also consider “separate flush from its parent” for slightly smoother phrasing.
🧹 Nitpick comments (9)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (2)
3-13: Consider extracting shared test sequences.The
stepsarray appears identical to the one inawait-closure-in-order/test.ts. If these test fixtures share the same interaction sequence, consider extracting the array to a shared constant to reduce duplication and improve maintainability.
15-17: Consider extracting to a shared test utility.The
clickhelper function appears to be duplicated across multiple test fixtures. Consider extracting it to a shared utility in the test utils directory to reduce duplication.Note: The non-null assertion operator assumes a button always exists. While this fail-fast behavior is acceptable for test code, ensure all test fixtures using this helper have the expected button element.
packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko (1)
2-8: Await/placeholder/control-flow fixture matches intended behavior; double-check concise syntaxThe
try+@placeholder+await+ local state pattern cleanly models “loading → resolved → interactive increment” and seems well-suited to exercise the new pending-scope/closure behavior this PR introduces.One thing to double-check: the concise syntax forms
await=resolveAfter(0, 1)andif=(value > 0)—if the current Marko translator prefersawait(resolveAfter(0, 1))/if (value > 0)instead, consider switching to those for consistency with other fixtures.packages/runtime-tags/src/dom/resume.ts (1)
167-171: Consider simplifying orphan-branch loop for readabilityThe
while (i && orphanBranches[--i]...)pluspop()dance is correct but hard to scan, especially now that the block also setsParentBranchandBranchScopes. You can keep the same behavior with a slightly clearer structure:- while (i && orphanBranches[--i][AccessorProp.Id] > branchId) { - orphanBranches[i][AccessorProp.ParentBranch] = branch; - (branch[AccessorProp.BranchScopes] ||= new Set()).add( - orphanBranches.pop()!, - ); - } + while (i) { + const orphan = orphanBranches[i - 1]; + if (orphan[AccessorProp.Id] <= branchId) break; + i--; + orphan[AccessorProp.ParentBranch] = branch; + (branch[AccessorProp.BranchScopes] ||= new Set()).add( + orphanBranches.pop()!, + ); + }Same semantics, but avoids the pre-decrement in the condition and the double indexing, which should make future maintenance less error-prone.
packages/runtime-tags/src/__tests__/main.test.ts (1)
504-531: Minor typo in variable name.
prevResumLogshould beprevResumeLogfor consistency withresumeLogandresumeIndex.- let prevResumLog = ""; + let prevResumeLog = ""; while (resumeIndex < resumeLogs.length) { const resumeLog = resumeLogs[resumeIndex++].replace( /(# Render)[^\n]+/, "$1", ); - if (resumeLog !== prevResumLog) { + if (resumeLog !== prevResumeLog) { while (csrIndex < csrLogs.length) { const csrLog = csrLogs[csrIndex++].replace( /(# Render)[^\n]+/, "$1", ); if (csrLog === resumeLog) { if (expected) { expected += "\n\n"; } expected += csrLog; break; } } if (actual) { actual += "\n\n"; } actual += resumeLog; } - prevResumLog = resumeLog; + prevResumeLog = resumeLog; }packages/runtime-tags/src/__tests__/utils/resolve.ts (4)
1-16: Global resolve state initialization and resetUsing
globalThis.__RESOLVE_STATE__ ||= { ... }is a clean way to guarantee a single, initialized shared state across tests. One optional tweak:resetResolveStatecouldclear()the existing map instead of replacing it, which preserves the map identity for any external references (if those ever appear), while keeping behavior the same in current usage.export function resetResolveState() { state.lastId = 0; - state.promises = new Map(); + state.promises.clear(); }
18-31:wait’s do/while loop semantics are non-obvious—consider simplification or a commentThe interaction between
id = await getSharedPromise(nextId)andnextId = state.promises.sizemakes it a bit hard to see at a glance whenwait()finishes, especially if new IDs can be added while earlier ones are resolving. If callers always schedule allresolveAftercalls before invokingwait, you could simplify to snapshotting the target once (e.g.,const target = state.promises.size; if (target) await getSharedPromise(target);) or add a short comment documenting that assumption so future readers don’t misinterpret the behavior.
65-82: Clarify the meaning of the optionalidinresolveAfter/rejectAfterRouting through
getSharedPromise(id)is a nice way to centralize ordering, and attaching{ value }to the returned promise is convenient for tests. The only slightly opaque part from the call site is that omittingidmeans “usestate.lastId + 1”. If these helpers are used broadly, a brief doc comment or a more descriptive parameter name (e.g.,stepId) could make that sequencing contract clearer without changing behavior.
84-106: RecursivegetSharedPromise/ stagedtickordering—watch for potential depth issuesThe recursive
getSharedPromise(id - 1).then(tick)pattern correctly enforces strictly ordered resolution across IDs and pairs well with the staged timers intick()to control scheduling. If tests ever end up requesting a very largeidfor the first time, this recursion could get deep; an iterative fill (looping fromexistingMax + 1up toid) would avoid any recursion-depth limits while preserving the same semantics.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (26)
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (65)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-script-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/if-member-expression-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/user-effect-abort-signal/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(7 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(2 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
✅ Files skipped from review due to trivial changes (1)
- packages/runtime-tags/src/tests/fixtures/migrate-effect-tag/test.ts
🚧 Files skipped from review as they are similar to previous changes (27)
- packages/runtime-tags/src/tests/fixtures/try-effects-async/template.marko
- packages/runtime-tags/src/tests/fixtures/error-async/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-static-multiple/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-skipped/test.ts
- packages/runtime-tags/src/tests/fixtures/html-script-nonce/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/template.marko
- packages/runtime-tags/src/tests/fixtures/local-closure-script/test.ts
- packages/runtime-tags/src/tests/fixtures/await-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/user-effect-abort-signal/test.ts
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/test.ts
- packages/runtime-tags/src/tests/fixtures/lifecycle-tag-this-attrs/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/template.marko
- packages/runtime-tags/src/tests/fixtures/let-undefined-until-dom/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholder-single/test.ts
- packages/runtime-tags/src/tests/fixtures/if-member-expression-intersection/test.ts
- packages/runtime-tags/src/tests/fixtures/html-style-nonce/test.ts
- packages/runtime-tags/src/tests/fixtures/catch-single-reject-async/test.ts
- packages/runtime-tags/src/tests/fixtures/placeholders-nested/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
- packages/runtime-tags/src/tests/fixtures/async-nested-resolve-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/async-resolve-out-of-order/test.ts
- packages/runtime-tags/src/tests/fixtures/log-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/return-serialize-circular/test.ts
- packages/runtime-tags/src/tests/fixtures/lifecycle-tag-assignment/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
🧰 Additional context used
🧬 Code graph analysis (19)
packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
wait(18-31)flush(45-47)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (5)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (2)
steps(3-13)skip_equivalent(15-15)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
after(33-43)flush(45-47)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
after(33-43)flush(45-47)
packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/main.test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
resetResolveState(13-16)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/dom/resume.ts (2)
packages/runtime-tags/src/common/types.ts (1)
AccessorProp(50-50)packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)
packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (2)
packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (1)
node(167-167)
packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)
packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 86-86: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 86-86: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: test: node@20
- GitHub Check: test: node@22
- GitHub Check: test: node@24
🔇 Additional comments (48)
packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts (1)
3-3:stepsnow correctly uses the sharedwaithelper as a stepUsing
waitdirectly (rather than a parameterized call) matches the updated resolve utilities and is consistent with other fixtures likeassign-destructured-reduced/test.ts. Looks good.packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
1-3: Confirmwaitstep semantics match previouswait(1)usageUsing a bare
waitfunction reference instepsis consistent with the new resolver-style test harness, assumingwaitnow encapsulates the default behavior that used to be expressed aswait(1). Please double-check that this fixture doesn’t rely on a non-default delay/argument from the old API so its timing still matches expectations.packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts (1)
1-3: Serialize-promise steps now correctly use wait token instead of invocationUsing
waitdirectly insteps = [{}, wait];aligns this fixture with the new resolver contract (wait-as-token) and matches other updated fixtures (e.g.,assign-destructured-reduced/test.ts). No issues from a typing or behavioral standpoint givenwait’s callable + marker shape.packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
1-5: Fixture update aligns with new flush/wait resolver semanticsImporting
flushand updatingstepsto[{}, flush, wait, click, wait]plusskip_equivalent = truematches the new resolver contract and the in-order streaming pattern used in related fixtures. No issues spotted.packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts (1)
3-3: LGTM! Test utility API updated correctly.The change from
wait(1)towaitaligns with the PR's refactoring of test timing utilities to an ID-driven resolver approach. This pattern is consistently applied across multiple test fixtures.packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts (1)
3-3: LGTM! Consistent with PR-wide test utility refactoring.The change from
wait(1)towaitcorrectly aligns with the updated test utilities that now use function references instead of invocations, matching the pattern seen in other fixtures.packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts (1)
3-3: LGTM! Test utility refactoring aligns with PR pattern.The change from
wait(1)towaitcorrectly updates the test to use the function reference as a token rather than immediately invoking it. Since thewaitfunction accepts no parameters, the previous argument was unused. This aligns with the PR's broader refactoring to ID-driven test resolvers.packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
1-1: LGTM!The imports are consistent with the new ID-driven test resolver utilities introduced in this PR.
packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
1-1: LGTM!The addition of
flushto the import is necessary for the updated test steps.packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko (1)
1-1: Import and fixture wiring look correctImporting
resolveAfterfrom../../utils/resolvematches the shared test utility and keeps this fixture consistent with the rest of the await-related tests.packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts (1)
3-3: The test infrastructure confirms this is the correct pattern. Thewaitfunction is defined with await: truemarker property, and the test runner checks for this marker usingisWait()before invoking the function. Storing the function reference directly in the steps array is the intended design—no changes needed.packages/runtime-tags/src/__tests__/utils/create-browser.ts (4)
5-12: LGTM!The type augmentation correctly reflects the new
streamAPI, and sharing__RESOLVE_STATE__between the test environment and simulated browser window is appropriate for test coordination.
29-47: LGTM!The queue-based batching implementation for
requestAnimationFrameis a reasonable test mock. The constant return value of0simplifies the implementation, which is acceptable for this test utility context wherecancelAnimationFrameusage is likely not tested.
49-92: LGTM!The streaming implementation effectively uses TreeWalker to progressively clone and append nodes, with flush markers enabling incremental rendering for tests. The deep clone behavior for script elements (via
document.importNode(node, isScript)) correctly ensures script content is copied together.The single-chunk fallback path is appropriately simple, handling both empty and single-chunk cases.
85-91: Static analysis warning is a false positive.The
document.writewarning from static analysis is not applicable here. This is a test utility wherechunksare controlled test fixtures, not user-supplied content. Usingdocument.writeis appropriate for simulating browser streaming behavior in tests.packages/runtime-tags/src/translator/util/signals.ts (5)
16-16: LGTM: Import addition supports new try placeholder logic.The
someutility is correctly imported and used on line 265 to check if any closure sections are under a try placeholder.
105-107: LGTM: Clean addition of try placeholder state tracking.The new section state follows established patterns and provides the necessary infrastructure for tracking try blocks with placeholder attributes.
275-284: LGTM: Helper correctly detects try placeholder ancestors.The
underTryPlaceholderfunction properly walks up the section tree from the parent, checking if any ancestor has the try placeholder state. Starting fromsection.parentis semantically correct—it checks if the section is under (a descendant of) a try placeholder, not if it is one.
1041-1062: LGTM: Branching logic appropriately handles placeholder vs. non-placeholder paths.The conditional logic correctly:
- Emits guarded script resumes for dynamic closures under try placeholders (enabling deferred rendering based on serialization conditions)
- Falls back to the original subscription model when not under a placeholder
The
getExprIfSerialized()guard ensures script execution is conditional on the section's serialization reason, aligning with the PR's objective to delay renders in pending scopes.
247-268: Closure resolution logic is correct; resume ID handling is properly integrated.The refactored code correctly:
- Stores
closureSignalBuilderonce in a local variable (line 249) and reuses it without redundant calls- Branches between direct builder usage for non-dynamic closures and runtime
_closure_getfallback- Conditionally includes the resume ID parameter only when a closure section is under a try placeholder, using
getResumeRegisterId(section, closure)with consistent scopingpackages/runtime-tags/src/dom/resume.ts (1)
127-131: AwaitCounter propagation from render to branch looks correctWiring
branch[AccessorProp.AwaitCounter]fromrender.p?.[branchId]and setting its.mback torender.mcleanly ties branch-level await state to the current render. This should give each resumed branch the right render context for pending work without introducing new side effects, sincerender.mis already defined beforevisitBranchesis invoked.packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts (1)
3-3: steps now use the shared wait token consistentlyPassing the
waitfunction as a step (instead of callingwait(1)) matches the token-based test API used elsewhere and keeps this fixture aligned with the shared resolve utilities.packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts (1)
3-3: steps correctly exercise function-reference behaviorSwitching to a bare
waitfunction reference (rather thanwait(1)) better matches this fixture’s goal of normalizing function references and is consistent with other updated tests.packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts (1)
3-3: Consistent use of wait marker in stepsUsing
waitdirectly here keeps this dynamic-tag fixture in sync with the shared resolve helpers and other async fixtures; no issues spotted.packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts (1)
3-3: Mechanical steps update looks correctThe switch to
[{}, wait]matches the new convention across fixtures and doesn’t introduce any behavioral risk for this for‑tag state test.packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts (1)
3-3: steps alignment with wait helper is fineThis fixture now follows the same
[{}, wait]pattern as the others; the change is safe and consistent.packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko (1)
1-7: Recursive await now uses shared resolveAfter helper coherentlyImporting
resolveAfterand wiring the recursion throughawait=resolveAfter(0)under the placeholder matches the async pattern used in other fixtures and keeps the timing logic centralized inutils/resolve; the import path and template structure both look correct.packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko (1)
1-7: await‑closure fixture shape looks correctThe concise
<let>state (let/value=1), click handler, placeholder, andawait=resolveAfter(0, 4)block together form a coherent exercise of await‑closure behavior; no syntax or structural issues stand out.packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko (1)
7-7: Updated await call remains consistent with async‑state intentUsing
resolveAfter(clickCount)in the await expression keeps the behavior tied to the click count while aligning with the updated helper API; the overall async‑state flow of this fixture remains intact.packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
1-3: Steps definition aligns with new resolve utilitiesImporting
flush/waitand usingsteps = [{}, flush, wait]matches the shared resolve helpers and the pattern in other fixtures; no issues from a test-harness perspective.packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko (1)
1-7: Template correctly exercises await + closure over stateImporting
resolveAfter, usinglet/value=1, a click handler that mutatesvalue, and awaitingresolveAfter(0, 4)before rendering “Hello” and the conditionalvaluespan gives a good surface to validate closure behavior across the await boundary; the syntax and flow look consistent with other Marko fixtures.packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
1-7: Updated steps sequence matches flush/wait token modelThe new
steps = [{}, flush, wait, click, wait, click, wait]plus importingflush/waitcleanly maps to the shared resolver utilities and preserves the prior “render, stabilize, click, stabilize…” intent. The hoistedclickfunction declaration is safe to reference in the array.packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
1-5: Steps and skip_equivalent are coherent with the scenario commentUsing
steps = [{}, wait, flush]together withskip_equivalent = true // try removed before flushreads correctly: first let async work (including the parent removal) settle viawait, then flush to observe post-removal output. No structural issues spotted.packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts (1)
1-5: Fixture is consistent with in‑order streaming test patternThe
{ flush, wait }import,steps = [{}, flush, wait], andskip_equivalent = true // in-order streamingmirror the updated async fixtures elsewhere and align with the shared resolve utilities; behavior should integrate cleanly with the test runner.packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts (1)
1-3: Adapting to shared wait helper looks correctSwitching from
wait(1)to the barewaittoken insteps = [{}, wait]matches the new resolver API and is consistent with other fixtures; the import and usage are in sync.packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
1-19: Well-structured in‑order await/closure test sequenceThe
stepssequence combiningafter(id)tokens,click, and a mid-streamflush, plusskip_equivalent = true, is coherent with the existing await-closure fixtures and should robustly exercise closure behavior across multiple await/resolve phases. Theclickhelper is straightforward and safe for test usage.packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
1-3: Multi‑flush steps configuration matches batched resolve intentAdding
flushto the imports and definingsteps = [{}, flush, flush, wait]aligns with the new resolve utilities and the pattern for nested/batched resolve tests; the sequence should give good coverage of multiple flush phases before final stabilization.packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts (1)
1-3: LGTM!The update from
wait(1)to thewaitfunction reference aligns with the new ID-driven resolve utilities pattern used across the test suite.packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
1-3: LGTM!The migration from
wait(4)to[{}, flush, flush, wait]aligns with the new streaming utilities. The absence ofskip_equivalentappears intentional for this isolated boundaries test case.packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (1)
1-3: LGTM!The new test fixture follows the established pattern for streaming-based tests with appropriate
flushandwaittokens.packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
1-5: LGTM!The addition of
skip_equivalent = trueis appropriate for in-order streaming tests where resume and CSR paths intentionally produce different intermediate states.packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
1-5: LGTM!The three
flushtokens appropriately model the nested async resolution steps, andskip_equivalent = truecorrectly marks this as an in-order streaming test.packages/runtime-tags/src/__tests__/main.test.ts (5)
14-20: LGTM!The new imports align with the expanded resolve utilities API.
249-262: LGTM!The streaming-based SSR rendering with
browser.stream(chunks)and the flush loop correctly handles the new streaming semantics.
311-336: LGTM!CSR correctly skips
flushtokens since client-side rendering doesn't require intermediate streaming flushes.
373-415: LGTM!The resume path correctly implements streaming with:
- Explicit flush handling that calls
flushNext()andrun()- Auto-flush loop at the end to process remaining pending flushes
- Proper microtask boundaries via
await 1
444-446: LGTM!The
beforeEachhook ensures test isolation by resetting the resolve state between render tests.packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
33-63: Tagging forafter,flush, andthrowsaligns well with the type guardsUsing
Object.assignto attach.wait,.flush, and.throwsflags to the respective functions keeps the runtime shapes simple, andisWait/isFlush/isThrowsline up cleanly with those flags. The API surface here looks consistent and easy to consume.
5eede97 to
bd85162
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 1
♻️ Duplicate comments (5)
.sizes/name-cache.json (1)
1-1: Verify the typo correction for "Detached".A past review flagged a spelling error in the identifier
$kDetatchedAwait(should be$kDetachedAwait). Please confirm this typo has been corrected throughout the codebase..sizes/dom.js (1)
1315-1325: Verify thatpendingScopes.pop()removes the correct scope.A past review identified a critical issue:
createBranch(via clone/walk processing) can push nested scopes onto the stack, sopendingScopes.pop()may remove the wrong scope—not theawaitBranchthat was just created.Please ensure the logic specifically targets the newly created
awaitBranchinstance rather than blindly popping the last entry.packages/runtime-tags/src/dom/resume.ts (1)
164-165: Fix typos in TODO comment.The comment contains two typos:
- "seperate" → "separate"
- "it's" → "its" (possessive, not contraction)
Apply this diff:
- // TODO: when branch is part of a seperate flush than it's parent, we + // TODO: when branch is part of a separate flush than its parent, wepackages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
1-3: Add missingskip_equivalentexport to match similar fixtures.This fixture uses the same in-order streaming pattern as other fixtures in this PR (e.g.,
async-nested-resolve-in-order,placeholder-skipped), which all exportskip_equivalent = true. Add this export after line 3:+export const skip_equivalent = true; // in-order streamingpackages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
62-82: Add type guard before accessingtagNameon TreeWalker nodes.Line 71 accesses
tagNamewithout checking if the node is an Element. SincecreateTreeWalker(parsed)is called without a nodeFilter parameter, it returns all node types. While Comment nodes are filtered at lines 64-68, Text and other node types can still reach line 71 and cause a runtime error.Add a type check:
- const isScript = (node as Element).tagName === "SCRIPT"; + const isScript = + node.nodeType === 1 /* Node.ELEMENT_NODE */ && + (node as Element).tagName === "SCRIPT";
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (155)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (82)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-script-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/if-member-expression-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/user-effect-abort-signal/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(7 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(2 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
✅ Files skipped from review due to trivial changes (2)
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
- .sizes/counter.ssr/entry.js
🚧 Files skipped from review as they are similar to previous changes (28)
- packages/runtime-tags/src/tests/fixtures/html-script-nonce/test.ts
- packages/runtime-tags/src/tests/fixtures/user-effect-abort-signal/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/template.marko
- package.json
- packages/runtime-tags/src/tests/fixtures/log-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/template.marko
- packages/runtime-tags/src/tests/fixtures/if-member-expression-intersection/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/function-references-optional-member-normalize/test.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/test.ts
- packages/runtime-tags/src/tests/fixtures/async-resolve-out-of-order/test.ts
- packages/runtime-tags/src/tests/fixtures/return-value-registered/test.ts
- .sizes/comments.ssr/entry.js
- packages/runtime-tags/src/tests/fixtures/async-resolve-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/migrate-effect-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/for-tag-single-node-only-child-in-parent/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
- packages/runtime-tags/src/tests/fixtures/local-closure-script/test.ts
- packages/runtime-tags/src/tests/fixtures/let-tag-set-in-effect/test.ts
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/tags/recurse.marko
- packages/runtime-tags/src/tests/fixtures/placeholder-static-multiple/test.ts
- packages/runtime-tags/src/common/accessor.debug.ts
- packages/runtime-tags/src/tests/fixtures/await-closure/test.ts
- packages/runtime-tags/src/tests/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts
- packages/runtime-tags/src/tests/fixtures/await-tag/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/template.marko
🧰 Additional context used
🧬 Code graph analysis (21)
packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (3)
after(33-43)flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/dom/signals.ts (2)
packages/runtime-tags/src/dom/resume.ts (1)
_resume(316-318)packages/runtime-tags/src/html/writer.ts (1)
_resume(164-176)
packages/runtime-tags/src/dom/resume.ts (4)
.sizes/dom.js (13)
branch(125-125)branch(841-842)branch(1705-1710)branch(1931-1932)branch(1971-1974)render(1801-1802)i(28-28)i(751-751)i(982-982)i(1003-1003)i(1752-1752)i(1797-1797)i(1804-1806)packages/runtime-tags/src/common/types.ts (1)
AccessorProp(50-50)packages/runtime-tags/src/html/writer.ts (1)
render(1183-1195)packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)
packages/runtime-tags/src/dom/control-flow.ts (3)
packages/runtime-tags/src/common/types.ts (3)
BranchScope(6-19)AccessorProp(50-50)Scope(20-32)packages/runtime-tags/src/dom/scope.ts (4)
findBranchWithKey(27-36)removeAndDestroyBranch(55-61)insertBranchBefore(63-74)tempDetachBranch(76-91)packages/runtime-tags/src/dom/queue.ts (8)
pendingEffects(19-19)runEffects(105-109)placeholderShown(18-18)queueRender(24-46)run(67-80)pendingScopes(20-20)PendingRender(7-12)queuePendingRender(48-58)
packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts (3)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
wait(18-31)flush(45-47)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (13)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/main.test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (4)
isFlush(57-59)isWait(53-55)resolveAfter(65-73)resetResolveState(13-16)
packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts (17)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/utils/create-browser.ts (3)
packages/runtime-class/src/translator/taglib/core/parse-module-code.js (1)
fn(14-14)packages/runtime-tags/src/dom/walker.ts (1)
walker(13-13).sizes/dom.js (1)
node(167-167)
packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
.sizes/dom.js (2)
packages/runtime-tags/src/dom/renderer.ts (2)
createAndSetupBranch(57-67)_content(76-119)packages/runtime-tags/src/dom/queue.ts (3)
queueRender(24-46)run(67-80)queuePendingRender(48-58)
packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 86-86: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
[warning] 86-86: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: test: node@24
- GitHub Check: test: node@22
- GitHub Check: test: node@20
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts
Show resolved
Hide resolved
bd85162 to
6aeb624
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Actionable comments posted: 0
♻️ Duplicate comments (6)
package.json (1)
69-69: Non-existent version specified — align with prior review feedback.As flagged in the previous review,
[email protected]does not exist on npm. The latest published version is5.0.0. Package installation will fail with the current configuration.Update the dependency to match a valid published release.
Apply this diff to fix:
- "mocha-snap": "^5.0.1", + "mocha-snap": "^5.0.0",If
5.0.1is a planned release that must be published before this PR merges, confirm the timeline and update the dependency once the package is published.packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
1-3: Addskip_equivalentexport to match other in-order async fixtures.This fixture follows the same in-order streaming pattern as other async *-in-order tests that export
skip_equivalent = true. To keep behavior consistent (especially for equivalent/SSR comparison), add the flag just after the import:-import { flush, wait } from "../../utils/resolve"; - -export const steps = [{}, flush, wait, click, wait, click, wait]; +import { flush, wait } from "../../utils/resolve"; +export const skip_equivalent = true; // in-order streaming + +export const steps = [{}, flush, wait, click, wait, click, wait];packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (1)
3-3: Possible missing flush in the sequence.As noted in a previous review, the sequence currently has 3
flushcalls, but if the original waswait(4), the pattern used in other fixtures (e.g.,async-deep-recursive/test.ts) suggests this should have 4 flush calls before the finalwait.packages/runtime-tags/src/__tests__/utils/create-browser.ts (1)
71-71: Type guard still missing fortagNameaccess.A past review comment flagged this line for accessing
tagNamewithout ensuringnodeis an Element, and was marked as addressed. However, the current code still lacks the type guard. TreeWalker can return any Node type (Text, Comment, Element, etc.), so accessing.tagNameon non-Element nodes is unsafe.Apply this fix to add a proper type guard:
- const isScript = (node as Element).tagName === "SCRIPT"; + const isScript = node.nodeType === 1 /* Node.ELEMENT_NODE */ && (node as Element).tagName === "SCRIPT";packages/runtime-tags/src/dom/resume.ts (1)
164-166: Typo in TODO comment already flagged.This typo ("seperate" → "separate" and "it's" → "its") was identified in a previous review.
packages/runtime-tags/src/dom/control-flow.ts (1)
238-245:pendingScopes.pop()may remove wrong scope when walk creates nested scopes.The
createBranchcall (line 238-242) pushes the branch scope topendingScopes, but its internal___clone()/walk processing can create additional nested scopes that also get pushed. The unconditionalpop()at line 244 will remove only the last scope on the stack, which may be a nested scope rather than theawaitBranchthat was just created.This matches the concern raised in a past review on
.sizes/dom.js. Consider tracking the specific branch instance and removing it by identity, or capturing the stack length beforecreateBranchand restoring appropriately.
🧹 Nitpick comments (2)
packages/runtime-tags/src/dom/control-flow.ts (1)
190-190: Address the TODO comment.The TODO suggests uncertainty about whether
placeholderShown.add(pendingEffects)is still needed at this point. Consider verifying and either removing the TODO or the call if no longer necessary.Do you want me to help investigate whether this call is still required?
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
96-106: Consider adding a comment explaining the triple-nested async pattern.The
setTimeout → setImmediate → setTimeoutnesting creates specific timing guarantees for async test sequencing, but the rationale isn't immediately obvious. A brief comment would aid future maintainers.
📜 Review details
Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro
⛔ Files ignored due to path filters (155)
package-lock.jsonis excluded by!**/package-lock.jsonand included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/dom.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/html.expected/tags/recurse.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/async-state/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure-within/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-closure/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-tag/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-single/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/csr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/.name-cache.jsonis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.hydrate.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/dom.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/html.expected/template.jsis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/resume.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr-sanitized.expected.mdis excluded by!**/__snapshots__/**and included by**packages/runtime-tags/src/__tests__/fixtures/try-effects-async/__snapshots__/ssr.expected.mdis excluded by!**/__snapshots__/**and included by**
📒 Files selected for processing (82)
.changeset/open-facts-obey.md(1 hunks).sizes.json(3 hunks).sizes/comments.ssr/entry.js(1 hunks).sizes/counter.ssr/entry.js(1 hunks).sizes/dom.js(21 hunks).sizes/name-cache.json(1 hunks)package.json(1 hunks)packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/tags/recurse.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/await-update-before-resume/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/catch-single-success-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/circular-tag-var-function-serialize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/dynamic-tag-input-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/error-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-node-only-child-in-parent/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/function-references-optional-member-normalize/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-script-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/if-member-expression-intersection/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/merged-define-tag-templates/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/migrate-effect-tag/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-single/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-skipped/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/script-tag-value-no-scope/template.marko(0 hunks)packages/runtime-tags/src/__tests__/fixtures/serialize-promise/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/template.marko(1 hunks)packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts(1 hunks)packages/runtime-tags/src/__tests__/fixtures/user-effect-abort-signal/test.ts(1 hunks)packages/runtime-tags/src/__tests__/main.test.ts(7 hunks)packages/runtime-tags/src/__tests__/utils/create-browser.ts(2 hunks)packages/runtime-tags/src/__tests__/utils/resolve.ts(2 hunks)packages/runtime-tags/src/common/accessor.debug.ts(1 hunks)packages/runtime-tags/src/common/accessor.ts(1 hunks)packages/runtime-tags/src/common/types.ts(3 hunks)packages/runtime-tags/src/dom/control-flow.ts(5 hunks)packages/runtime-tags/src/dom/queue.ts(6 hunks)packages/runtime-tags/src/dom/resume.ts(2 hunks)packages/runtime-tags/src/dom/signals.ts(2 hunks)packages/runtime-tags/src/translator/core/try.ts(3 hunks)packages/runtime-tags/src/translator/util/optional.ts(1 hunks)packages/runtime-tags/src/translator/util/signals.ts(4 hunks)
💤 Files with no reviewable changes (1)
- packages/runtime-tags/src/tests/fixtures/script-tag-value-no-scope/template.marko
✅ Files skipped from review due to trivial changes (1)
- .sizes/comments.ssr/entry.js
🚧 Files skipped from review as they are similar to previous changes (39)
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/test.ts
- packages/runtime-tags/src/tests/fixtures/async-state/template.marko
- packages/runtime-tags/src/common/accessor.debug.ts
- .sizes/counter.ssr/entry.js
- .changeset/open-facts-obey.md
- packages/runtime-tags/src/tests/fixtures/user-effect-abort-signal/test.ts
- packages/runtime-tags/src/tests/fixtures/function-references-optional-member-normalize/test.ts
- packages/runtime-tags/src/translator/core/try.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/test.ts
- packages/runtime-tags/src/tests/fixtures/catch-single-success-async/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/test.ts
- .sizes.json
- packages/runtime-tags/src/tests/fixtures/dynamic-tag-input-intersection/test.ts
- packages/runtime-tags/src/tests/fixtures/catch-single-reject-async/test.ts
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/test.ts
- packages/runtime-tags/src/tests/fixtures/if-member-expression-intersection/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-within/template.marko
- packages/runtime-tags/src/tests/fixtures/await-closure/template.marko
- packages/runtime-tags/src/tests/fixtures/placeholder-skipped/test.ts
- packages/runtime-tags/src/tests/fixtures/try-effects-async/template.marko
- packages/runtime-tags/src/tests/fixtures/serialize-promise/test.ts
- packages/runtime-tags/src/tests/fixtures/migrate-effect-tag/test.ts
- packages/runtime-tags/src/common/types.ts
- packages/runtime-tags/src/tests/fixtures/error-async/test.ts
- packages/runtime-tags/src/tests/fixtures/closure-owner-scope-serialize-in-serialized-function/test.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/merged-define-tag-templates/test.ts
- .sizes/name-cache.json
- packages/runtime-tags/src/dom/signals.ts
- packages/runtime-tags/src/tests/fixtures/await-closure-inert/template.marko
- packages/runtime-tags/src/tests/fixtures/await-remove-parent/test.ts
- packages/runtime-tags/src/tests/fixtures/await-update-after-resume/template.marko
- packages/runtime-tags/src/tests/fixtures/async-deep-recursive/tags/recurse.marko
- packages/runtime-tags/src/tests/fixtures/async-multi-resolve-in-order-and-update/template.marko
- packages/runtime-tags/src/tests/fixtures/assign-destructured-reduced/test.ts
- packages/runtime-tags/src/translator/util/optional.ts
- packages/runtime-tags/src/tests/fixtures/async-resolve-in-order/test.ts
- packages/runtime-tags/src/tests/fixtures/async-nested-resolve-in-order/template.marko
- packages/runtime-tags/src/tests/fixtures/await-update-before-resume/template.marko
🧰 Additional context used
🧬 Code graph analysis (30)
packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-assignment/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/html-comment-var/test.ts (1)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)
packages/runtime-tags/src/__tests__/fixtures/function-references-normalize/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/try-effects-async/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (2)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)packages/runtime-tags/src/__tests__/fixtures/catch-single-reject-async/test.ts (1)
skip_equivalent(5-5)
packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/return-serialize-circular/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/log-tag/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/placeholders-nested/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/for-tag-single-text-node-with-text-before/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/placeholder-static-multiple/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/lifecycle-tag-this-attrs/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/await-update-after-resume/test.ts (17)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-deep-recursive/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-multi-resolve-in-order-and-update/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-before-and-after-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reject-then-resolve-isolated-boundaries/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-resolve-out-of-order/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/async-state/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-closure-inert/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure-within/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/fixtures/await-remove-parent/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/fixtures/await-tag/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/translator/util/signals.ts (5)
packages/runtime-tags/src/translator/util/state.ts (1)
createSectionState(22-38)packages/runtime-tags/src/translator/util/references.ts (2)
getCanonicalBinding(1410-1421)getScopeAccessorLiteral(1455-1469)packages/runtime-tags/src/translator/util/sections.ts (3)
isDynamicClosure(356-358)isImmediateOwner(348-350)Section(51-80)packages/runtime-tags/src/translator/util/scope-read.ts (1)
getScopeExpression(63-74)packages/runtime-tags/src/translator/util/optional.ts (1)
some(246-251)
packages/runtime-tags/src/__tests__/fixtures/return-value-registered/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/await-closure/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/await-closure-in-order/test.ts (1)
steps(3-13)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
after(33-43)flush(45-47)
packages/runtime-tags/src/dom/resume.ts (2)
packages/runtime-tags/src/common/types.ts (1)
AccessorProp(50-50)packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)
packages/runtime-tags/src/__tests__/fixtures/let-undefined-until-dom/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/main.test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (4)
isFlush(57-59)isWait(53-55)resolveAfter(65-73)resetResolveState(13-16)
packages/runtime-tags/src/__tests__/fixtures/local-closure-script/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/html-script-nonce/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-nested-resolve-in-order/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/async-resolve-in-order/test.ts (2)
steps(3-3)skip_equivalent(5-5)packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/html-style-nonce/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/async-reorder-nested-batched-resolve/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (2)
flush(45-47)wait(18-31)
packages/runtime-tags/src/__tests__/fixtures/for-tag-with-state/test.ts (2)
packages/runtime-tags/src/__tests__/fixtures/assign-destructured-reduced/test.ts (1)
steps(3-3)packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
.sizes/dom.js (4)
packages/runtime-tags/src/dom/compat.ts (1)
render(74-111)packages/runtime-tags/src/dom/signals.ts (2)
_closure_get(181-209)subscribeToScopeSet(145-157)packages/runtime-tags/src/dom/queue.ts (7)
_enable_catch(160-220)runEffects(105-109)pendingEffects(19-19)queueRender(24-46)run(67-80)queuePendingRender(48-58)rendering(21-21)packages/runtime-tags/src/dom/scope.ts (2)
findBranchWithKey(27-36)removeAndDestroyBranch(55-61)
packages/runtime-tags/src/__tests__/fixtures/let-tag-set-in-effect/test.ts (1)
packages/runtime-tags/src/__tests__/utils/resolve.ts (1)
wait(18-31)
🪛 ast-grep (0.40.0)
packages/runtime-tags/src/__tests__/utils/create-browser.ts
[warning] 86-86: Direct HTML content assignment detected. Modifying innerHTML, outerHTML, or using document.write with unsanitized content can lead to XSS vulnerabilities. Use secure alternatives like textContent or sanitize HTML with libraries like DOMPurify.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://www.dhairyashah.dev/posts/why-innerhtml-is-a-bad-idea-and-how-to-avoid-it/
- https://cwe.mitre.org/data/definitions/79.html
(unsafe-html-content-assignment)
[warning] 86-86: Direct modification of innerHTML or outerHTML properties detected. Modifying these properties with unsanitized user input can lead to XSS vulnerabilities. Use safe alternatives or sanitize content first.
Context: document.write(chunks[0])
Note: [CWE-79] Improper Neutralization of Input During Web Page Generation [REFERENCES]
- https://owasp.org/www-community/xss-filter-evasion-cheatsheet
- https://cwe.mitre.org/data/definitions/79.html
(dom-content-modification)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
- GitHub Check: test: node@20
- GitHub Check: test: node@24
- GitHub Check: test: node@22
No description provided.