a post-component library for building user-interfaces on the web.

fix(ssr): render nothing on undefined (#195)

just like on the client, and just like null

authored by tombl.dev and committed by

GitHub ed41b81a 7ffe0ce0

+8 -2
+2 -2
src/server.ts
··· 126 126 } 127 127 128 128 function render_attribute(name: string, value: unknown) { 129 - if (value === false || value === null || typeof value === 'function') { 129 + if (value === false || value == null || typeof value === 'function') { 130 130 return '' 131 131 } 132 132 if (value === true) return name ··· 168 168 prev_end = replace_end 169 169 } 170 170 yield template.source.slice(prev_end) 171 - } else if (value !== null) { 171 + } else if (value != null) { 172 172 yield escape(value) 173 173 } 174 174
+6
src/server/tests/basic.test.ts
··· 32 32 ) 33 33 }) 34 34 35 + test('undefined children render empty', () => { 36 + assert_eq(renderToString(html`<div>${undefined}</div>`), '<?[><div><?[><?]></div><?]>') 37 + assert_eq(renderToString(html`<div>${null}</div>`), '<?[><div><?[><?]></div><?]>') 38 + }) 39 + 35 40 if (__DEV__) { 36 41 test('invalid part placement raises error', () => { 37 42 try { ··· 73 78 assert_eq(renderToString(html`<a href=${'/url'}></a>`), '<?[><a href="/url"></a><?]>') 74 79 assert_eq(renderToString(html`<details hidden=${false}></details>`), '<?[><details ></details><?]>') 75 80 assert_eq(renderToString(html`<details hidden=${true}></details>`), '<?[><details hidden></details><?]>') 81 + assert_eq(renderToString(html`<details hidden=${undefined}></details>`), '<?[><details ></details><?]>') 76 82 }) 77 83 78 84 test('quoted attributes', () => {