wip(ssr): escape helpers
This commit is contained in:
51
packages/server-renderer/src/helpers.ts
Normal file
51
packages/server-renderer/src/helpers.ts
Normal 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 = '"'
|
||||
break
|
||||
case 38: // &
|
||||
escaped = '&'
|
||||
break
|
||||
case 39: // '
|
||||
escaped = '''
|
||||
break
|
||||
case 60: // <
|
||||
escaped = '<'
|
||||
break
|
||||
case 62: // >
|
||||
escaped = '>'
|
||||
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))
|
||||
}
|
||||
@@ -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)[]
|
||||
|
||||
Reference in New Issue
Block a user