withastro / compiler

The Astro compiler. Written in Go. Distributed as WASM.
Other
496 stars 59 forks source link

Undefined class attribute is not filtered out with `scopedStyleStrategy: 'class'` #1005

Closed delucis closed 4 months ago

delucis commented 6 months ago

Astro Info

Astro                    v4.8.3
Node                     v18.18.0
System                   Linux (x64)
Package Manager          npm
Output                   static
Adapter                  none
Integrations             none

If this issue only occurs in one browser, which browser is a problem?

n/a / All

Describe the Bug

If a component sets the class attribute to undefined, this is stringified and included in build output when using scopedStyleStrategy: 'class', unlike behaviour for other attributes where setting them to undefinded causes the attribute to be omitted in build output.

For example, a component that does this:

<div class={undefined}>

Will render something like the following:

<div class="undefined astro-HASH">

What's the expected result?

The build output should not include undefined in the class attribute.

Link to Minimal Reproducible Example

https://stackblitz.com/edit/github-sgqbuf?file=src%2FTest.astro

Participation

bluwy commented 6 months ago

Looks like a bug with the compiler. It generates code like this:

return $$render`<div${$$addAttribute((undefined) + " astro-ojezl33t", "class")}></div>`;

We probably need to update https://github.com/withastro/compiler/blob/face55431403f20d81c4b5cd3cc4173320632ad9/internal/transform/scope-html.go#L148-L153 to generate (undefined ?? '') instead.