You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Return [**JSX**](#jsx), and HTML with proper HTML headers automatically
18
+
19
+
Allows you to use [JSX](#jsx) and HTML with proper headers and support.
19
20
20
21
Install with:
22
+
21
23
```bash
22
24
bun add @elysiajs/html
23
25
```
24
26
25
27
Then use it:
26
-
```typescript
28
+
29
+
```tsx
27
30
import { Elysia } from'elysia'
28
31
import { html } from'@elysiajs/html'
29
32
30
-
const page =`<html lang="en">
31
-
<head>
32
-
<title>Hello World</title>
33
-
</head>
34
-
<body>
35
-
<h1>Hello World</h1>
36
-
</body>
37
-
</html>`
38
-
39
33
newElysia()
40
34
.use(html())
41
-
.get('/', () =>page)
35
+
.get(
36
+
'/html',
37
+
() =>`
38
+
<html lang="en">
39
+
<head>
40
+
<title>Hello World</title>
41
+
</head>
42
+
<body>
43
+
<h1>Hello World</h1>
44
+
</body>
45
+
</html> `
46
+
)
47
+
.get('/jsx', () => (
48
+
<htmllang="en">
49
+
<head>
50
+
<title>Hello World</title>
51
+
</head>
52
+
<body>
53
+
<h1>Hello World</h1>
54
+
</body>
55
+
</html>
56
+
))
42
57
.listen(8080)
43
58
```
44
59
45
-
If any html tag is returned, response will be treat as HTML response automatically
60
+
This plugin will automatically add `Content-Type: text/html; charset=utf8` header to the response, add `<!doctype html>` and convert it into a Response object.
61
+
62
+
## Options
63
+
64
+
### contentType
65
+
66
+
- Type: `string`
67
+
- Default: `'text/html; charset=utf8'`
68
+
69
+
The content-type of the response.
70
+
71
+
### autoDetect
72
+
73
+
- Type: `boolean`
74
+
- Default: `true`
75
+
76
+
Whether to automatically detect HTML content and set the content-type.
77
+
78
+
### autoDoctype
79
+
80
+
- Type: `boolean | 'full'`
81
+
- Default: `true`
82
+
83
+
Whether to automatically add `<!doctype html>` to a response starting with `<html>`, if not found.
84
+
85
+
Use `full` to also automatically add doctypes on responses returned without this plugin
86
+
87
+
```ts
88
+
// without the plugin
89
+
app.get('/', () =>'<html></html>')
90
+
91
+
// With the plugin
92
+
app.get('/', ({ html }) =>html('<html></html>')
93
+
```
94
+
95
+
### isHtml
46
96
47
-
## JSX
48
-
Starting from HTML plugin > 0.6.1, you can directly use JSX to create, and return HTML automatically.
97
+
- Type: `(value:string) =>boolean`
98
+
- Default: `isHtml` (exported function)
99
+
100
+
The function used to detect if a string is a html or not. Default implementation if length is greater than 7, starts with `<` and ends with `>`.
101
+
102
+
Keep in mind there's no real way to validate HTML, so the default implementation is a best guess.
103
+
104
+
## Jsx
105
+
106
+
<br />
107
+
108
+
::: warning
109
+
110
+
# Learn how to [sanitize](https://github.com/kitajs/html#sanitization) and avoid xss vulnerabilities in your code!
111
+
112
+
:::
113
+
114
+
<br />
115
+
116
+
This plugin re-exports [@kitajs/html](https://github.com/kitajs/html), which is a JSX factory for creating HTML strings from JSX. Please report JSX related issues to that repository.
117
+
118
+
To use JSX, first rename your file extension to either `.tsx` or `.jsx`.
119
+
120
+
Then, add the following to your `tsconfig.json`:
121
+
122
+
```jsonc
123
+
// tsconfig.json
49
124
50
-
### Setup
51
-
To utilize JSX, modify the tsconfig.json as the following:
52
-
```json
53
125
{
54
-
"compilerOptions": {
55
-
"jsx": "react",
56
-
"jsxFactory": "ElysiaJSX",
57
-
"jsxFragmentFactory": "ElysiaJSX.Fragment",
58
-
"types": [
59
-
"bun-types"
60
-
]
61
-
}
126
+
"compilerOptions": {
127
+
"jsx": "react",
128
+
"jsxFactory": "Html.createElement",
129
+
"jsxFragmentFactory": "Html.Fragment"
130
+
}
62
131
}
63
132
```
64
133
65
-
and that's it! 🎉
66
-
67
-
You can now use JSX to define your web page and Elysia will turns them to HTML automatically.
134
+
Then, you can simply use the JSX syntax to create HTML strings:
68
135
69
136
```tsx
70
137
// app.tsx
138
+
71
139
import { Elysia } from'elysia'
72
140
import { html } from'@elysiajs/html'
73
141
@@ -86,63 +154,26 @@ new Elysia()
86
154
.listen(8080)
87
155
```
88
156
89
-
::: tip
90
-
To use JSX, don't forget to rename your file extension to either `.tsx` or `.jsx`
91
-
:::
92
-
93
-
## Sanitize HTML
94
-
If you are using JSX, you can use `safe` attribute to sanitize unsafe value
You can now use JSX to define your web page and Elysia will turns them to HTML automatically.
116
160
117
-
## Handler
118
-
Below are the value added to the handler.
161
+
## Sanitization
119
162
120
-
### html
121
-
A function that converts string to `Response` with `Content-Type: text/html; charset=utf8` header.
163
+
To keep this section up to date, please refer to the [sanitization](https://github.com/kitajs/html/tree/master#sanitization) section of the `@kitajs/html` repository.
122
164
123
-
Type:
124
-
```typescript
125
-
html(value: string) => Response
126
-
```
165
+
## Manual handler
127
166
128
-
#### Example:
129
-
Although we recommended relying on automatic response, but you can optionally you can return explictly return any string with HTML header.
167
+
We recommend relying on automatic responses, but you can optionally disable `autoDetect` and explicitly only use the `html` function.
0 commit comments