wip(ssr): escape helpers

This commit is contained in:
Evan You
2020-01-26 17:35:21 -05:00
parent 4e40d0d7c8
commit 066ba82c7f
10 changed files with 81 additions and 23 deletions

View File

@@ -0,0 +1,51 @@
import { toDisplayString } from '@vue/shared'
const escapeRE = /["'&<>]/
export function escape(string: unknown) {
const str = '' + string
const match = escapeRE.exec(str)
if (!match) {
return str
}
let html = ''
let escaped: string
let index: number
let lastIndex = 0
for (index = match.index; index < str.length; index++) {
switch (str.charCodeAt(index)) {
case 34: // "
escaped = '&quot;'
break
case 38: // &
escaped = '&amp;'
break
case 39: // '
escaped = '&#39;'
break
case 60: // <
escaped = '&lt;'
break
case 62: // >
escaped = '&gt;'
break
default:
continue
}
if (lastIndex !== index) {
html += str.substring(lastIndex, index)
}
lastIndex = index + 1
html += escaped
}
return lastIndex !== index ? html + str.substring(lastIndex, index) : html
}
export function interpolate(value: unknown) {
return escape(toDisplayString(value))
}

View File

@@ -9,6 +9,8 @@ import {
} from 'vue'
import { isString, isPromise, isArray } from '@vue/shared'
export * from './helpers'
type SSRBuffer = SSRBufferItem[]
type SSRBufferItem = string | ResolvedSSRBuffer | Promise<SSRBuffer>
type ResolvedSSRBuffer = (string | ResolvedSSRBuffer)[]