fix: avoid compiler crash on <select value> with a sibling block#18422
Open
sarathfrancis90 wants to merge 1 commit into
Open
fix: avoid compiler crash on <select value> with a sibling block#18422sarathfrancis90 wants to merge 1 commit into
<select value> with a sibling block#18422sarathfrancis90 wants to merge 1 commit into
Conversation
… element
A `<select value="...">` whose contents are otherwise static was classified as a
static element, so no element reference was created for it. The regular-element
visitor still needs that reference to emit the special `select.__value` / value
assignment, so it tried to build `null.value = ...` and the compiler threw a raw
`TypeError: Cannot read properties of null` from codegen instead of producing
output. This only surfaced when the select had a sibling block (e.g. an `{#if}`),
which is what routes it through the static-element fast path.
`input`, `textarea` and `option` already opt out of the static fast path for
their value attributes; `select` needs the same treatment.
🦋 Changeset detectedLatest commit: b4a0877 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
A
<select>with a staticvalueattribute crashes the compiler in client mode when it has a sibling block, e.g.:{#if false}{/if} <select value="b"> <option>a</option> <option>b</option> </select>This throws
TypeError: Cannot read properties of null (reading 'type')from codegen rather than compiling. The sibling block is what routes the select throughis_static_element, which classified it as fully static so no element reference was created for it. The regular-element visitor still needs that reference to emit the specialselect.__value/value assignment, so it ended up buildingnull.value = ....input,textareaandoptionalready opt out of the static fast path for their value attributes —selectjust needs the same. With the fix it compiles and the matching option is selected.Tests and linting
Added a
runtime-runessample that reproduces the crash and asserts the right option is selected; it fails without the fix and passes with it. Fullpnpm test,pnpm lintandpnpm checkare green. Added a changeset.