Skip to content

Commit 8895bd4

Browse files
authored
fix: coerce nullish <title> to empty string (#16863)
1 parent e0dba16 commit 8895bd4

File tree

4 files changed

+30
-1
lines changed

4 files changed

+30
-1
lines changed

.changeset/silly-walls-fail.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
'svelte': patch
3+
---
4+
5+
fix: coerce nullish `<title>` to empty string

packages/svelte/src/compiler/phases/3-transform/client/visitors/TitleElement.js

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,19 @@ export function TitleElement(node, context) {
1212
/** @type {any} */ (node.fragment.nodes),
1313
context
1414
);
15+
const evaluated = context.state.scope.evaluate(value);
1516

16-
const statement = b.stmt(b.assignment('=', b.id('$.document.title'), value));
17+
const statement = b.stmt(
18+
b.assignment(
19+
'=',
20+
b.id('$.document.title'),
21+
evaluated.is_known
22+
? b.literal(evaluated.value)
23+
: evaluated.is_defined
24+
? value
25+
: b.logical('??', value, b.literal(''))
26+
)
27+
);
1728

1829
if (has_state) {
1930
context.state.update.push(statement);
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
import { test } from '../../test';
2+
3+
export default test({
4+
test({ assert, target }) {
5+
assert.equal(target.ownerDocument.title, '');
6+
}
7+
});
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
<script>
2+
const thing = {};
3+
</script>
4+
<svelte:head>
5+
<title>{thing.thing}</title>
6+
</svelte:head>

0 commit comments

Comments
 (0)