0
0
mirror of https://github.com/honojs/hono.git synced 2024-12-01 11:51:01 +01:00
hono/deno_dist/utils/html.ts

48 lines
1.1 KiB
TypeScript
Raw Normal View History

export type HtmlEscaped = { isEscaped: true }
export type HtmlEscapedString = string & HtmlEscaped
export type StringBuffer = [string]
// The `escapeToBuffer` implementation is based on code from the MIT licensed `react-dom` package.
// https://github.com/facebook/react/blob/main/packages/react-dom-bindings/src/server/escapeTextForBrowser.js
const escapeRe = /[&<>'"]/
2022-07-02 08:09:45 +02:00
export const escapeToBuffer = (str: string, buffer: StringBuffer): void => {
const match = str.search(escapeRe)
if (match === -1) {
buffer[0] += str
return
}
let escape
let index
let lastIndex = 0
for (index = match; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34: // "
escape = '&quot;'
break
case 39: // '
escape = '&#39;'
break
case 38: // &
escape = '&amp;'
break
case 60: // <
escape = '&lt;'
break
case 62: // >
escape = '&gt;'
break
default:
continue
}
buffer[0] += str.substring(lastIndex, index) + escape
lastIndex = index + 1
}
buffer[0] += str.substring(lastIndex, index)
2022-07-02 08:09:45 +02:00
}