Skip to content

Commit c3275ee

Browse files
authored
fix(jsx): Write the raw value if the value is a HtmlEscaped string (#1739)
* fix(jsx): Write the raw value if the value is a HtmlEscaped string * chore: denoify
1 parent 79dc187 commit c3275ee

File tree

3 files changed

+12
-4
lines changed

3 files changed

+12
-4
lines changed

deno_dist/jsx/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ export class JSXNode implements HtmlEscaped {
130130
buffer[0] += ` ${key}="`
131131
escapeToBuffer(v, buffer)
132132
buffer[0] += '"'
133-
} else if (typeof v === 'number') {
134-
buffer[0] += ` ${key}="${v}"`
135133
} else if (v === null || v === undefined) {
136134
// Do nothing
135+
} else if (typeof v === 'number' || (v as HtmlEscaped).isEscaped) {
136+
buffer[0] += ` ${key}="${v}"`
137137
} else if (typeof v === 'boolean' && booleanAttributes.includes(key)) {
138138
if (v) {
139139
buffer[0] += ` ${key}=""`

src/jsx/index.test.tsx

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -365,6 +365,14 @@ describe('render to string', () => {
365365
expect(template.toString()).toBe('<h1 style="color:red;font-size:small">Hello</h1>')
366366
})
367367
})
368+
369+
describe('HtmlEscaped in props', () => {
370+
it('should not be double-escaped', () => {
371+
const escapedString = html`${'<html-escaped-string>'}`
372+
const template = <span data-text={escapedString}>Hello</span>
373+
expect(template.toString()).toBe('<span data-text="&lt;html-escaped-string&gt;">Hello</span>')
374+
})
375+
})
368376
})
369377

370378
describe('memo', () => {

src/jsx/index.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -130,10 +130,10 @@ export class JSXNode implements HtmlEscaped {
130130
buffer[0] += ` ${key}="`
131131
escapeToBuffer(v, buffer)
132132
buffer[0] += '"'
133-
} else if (typeof v === 'number') {
134-
buffer[0] += ` ${key}="${v}"`
135133
} else if (v === null || v === undefined) {
136134
// Do nothing
135+
} else if (typeof v === 'number' || (v as HtmlEscaped).isEscaped) {
136+
buffer[0] += ` ${key}="${v}"`
137137
} else if (typeof v === 'boolean' && booleanAttributes.includes(key)) {
138138
if (v) {
139139
buffer[0] += ` ${key}=""`

0 commit comments

Comments
 (0)